【node】同步讀取readFileSync和非同步讀取readFile的區別
阿新 • • 發佈:2018-12-01
先結論:非同步讀取檔案的時候由作業系統在後臺進行讀取,不會阻礙下面的程式碼執行。同步讀取的時候會阻礙下面的程式碼執行。
再案例:
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'); //非同步讀取結束 } });
結果:
看出是按這個順序執行的:同步讀取開始---------->同步讀取結束---------->非同步讀取開始---------->非同步讀取結束
結論:同步讀取阻塞下面程式碼執行。