先結論:異步讀取文件的時候由操作系統在后台進行讀取,不會阻礙下面的代碼執行。同步讀取的時候會阻礙下面的代碼執行。
再案例:
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'); console.log('end sync read'); //同步讀取結束
結果:
看出是按這個順序執行的:異步讀取開始--------------->同步讀取開始--------------------->同步讀取結束---------------->異步讀取結束
異步讀取沒有結束,同步讀取就完成了。
結論:異步讀取沒有阻塞下面代碼的執行。
調換一下代碼就更明顯了
var fs = require('fs'); //獲取fs模塊 console.log('start sync read'); //同步讀取開始 var date = fs.readFileSync('log.txt','utf-8'); 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'); //異步讀取結束 } });
結果:
看出是按這個順序執行的:同步讀取開始--------------->同步讀取結束--------------------->異步讀取開始---------------->異步讀取結束
結論:同步讀取阻塞下面代碼執行。