場景
Node.js最大的特點就是異步式I/O(或者非阻塞I/O)與事件緊密結合的編程模式。這種模式與傳統的同步式I/O線性的編程思路有很大的不同,因為控制流很大程度上要靠事件和回調函數來組織,一個邏輯要拆分為若干個單元。
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
關注公眾號
霸道的程序猿
獲取編程相關電子書、教程推送與免費下載。
實現
在Node中如何使用異步的方式讀取一個文件,新建readFile.js
var fs = require('fs'); fs.readFile('badao.txt','utf-8',function (err,data) { if(err){ console.log(err); }else{ console.log(data); } }); console.log('讀取文件結束');
然后在同級目錄下新建文件badao.txt用來作為讀取的內容。
運行如下命令
node readFile.js
運行的結果如下
Node也提供了同步讀取文件的API
新建文件readFileSync.js
var fs = require('fs'); var data = fs.readFileSync('badao.txt','utf-8'); console.log(data); console.log('讀取結束');
然后運行如下命令
node readFileSync.js
運行結果如下
兩次運行的結果不同。
同步讀取文件的方式比較好理解,將文件名作為參數傳入,fs.readFileSync函數,堵塞等待讀取完成后將文件的內容作為函數的返回值
賦給data變量。然后控制台輸出data的值,最后輸出結束。
異步式IO是通過回調函數來實現的。fs.readFile接收了三個參數。第三個是匿名的回調函數。
fs.readFile調用時所作的工作就是將異步式IO請求發送給了操作系統,然后李繼峰返回並執行后面的語句,
執行完以后進入事件循環監聽事件。當fs接收到IO請求完成的事件時,事件循環會主動調用回調函數以完成后續工作。因此會先看到輸出結束,
再看到文件內容。