Node中同步與異步的方式讀取文件


場景

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請求完成的事件時,事件循環會主動調用回調函數以完成后續工作。因此會先看到輸出結束,

再看到文件內容。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM