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

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

先結論:非同步讀取檔案的時候由作業系統在後臺進行讀取,不會阻礙下面的程式碼執行。同步讀取的時候會阻礙下面的程式碼執行。

再案例:

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'); //非同步讀取結束 } });

結果:

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

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