1. 程式人生 > >【node】同步讀取readFileSync和異步讀取readFile的區別

【node】同步讀取readFileSync和異步讀取readFile的區別

var function nod class pan .com adf 同步 文本

先結論:異步讀取文件的時候由操作系統在後臺進行讀取,不會阻礙下面的代碼執行。同步讀取的時候會阻礙下面的代碼執行。

再案例:

test.js

var fs = require(‘fs‘);                //引入fs模塊
console.log(‘start async read‘);        //異步讀取開始
fs.readFile(‘test2.js‘,function(error,date){    //讀取文件,回調函數第一個參數表示錯誤信息,第二個參數為讀取的文本內容
    if(error){
        console.log(error);
    }else{
        console.log(
‘end async read‘); //異步讀取結束 } }); console.log(‘start sync read‘); //同步讀取開始 var date = fs.readFileSync(‘log.txt‘,‘utf-8‘); //date為文本內容 console.log(‘end sync read‘); //同步讀取結束

結果:

技術分享圖片

看出是按這個順序執行的:異步讀取開始---------->同步讀取開始---------->同步讀取結束---------->異步讀取結束

異步讀取沒有結束,同步讀取就完成了。

結論:異步讀取沒有阻塞下面代碼的執行。

調換一下代碼就更明顯了

var fs = require(‘fs‘);                //引入fs模塊

console.log(‘start sync read‘); //同步讀取開始
var date = fs.readFileSync(‘log.txt‘,‘utf-8‘); //date為讀取的文本內容
console.log(‘end sync read‘);    //同步讀取結束


console.log(‘start async read‘);        //異步讀取開始
fs.readFile(‘test2.js‘,function(error,date){    //讀取文件,回調函數第一個參數表示錯誤信息,第二個參數為讀取的文本內容
if(error){ console.log(error); }else{ console.log(‘end async read‘); //異步讀取結束 } });

結果:

技術分享圖片

看出是按這個順序執行的:同步讀取開始---------->同步讀取結束---------->異步讀取開始---------->異步讀取結束

結論:同步讀取阻塞下面代碼執行。

【node】同步讀取readFileSync和異步讀取readFile的區別