Node.js回調概念

什麼是回調?

回調是一個異步等效的功能。在完成特定任務回調函數被調用。 Node大量使用了回調。Node的所有的API都支持回調這樣的一種方式。

例如,一個函數讀取一個文件可能開始讀取文件,並使得下一個指令可以被執行立即返回控制到執行環境。一旦文件I/O完成後,它會調用回調函數,同時傳遞迴調函數,該文件的內容作爲參數。因此,有沒有堵塞或等待文件I/ O。這使得Node.js高度可擴展,因爲它可以處理大量的請求,而無需等待任何函數來返回結果。

阻塞代碼例子

創建一個名爲input.txt的文件有以下內容的文本

Yiibai Point is giving self learning content
to teach the world in simple and easy way!!!!!

創建一個js文件名爲main.js裏面有如下代碼:

var fs = require("fs"); var data = fs.readFileSync('input.txt'); console.log(data.toString()); console.log("Program Ended");

現在運行main.js看到的結果:

$ node main.js

驗證輸出

Yiibai Point is giving self learning content
to teach the world in simple and easy way!!!!!
Program Ended

非阻塞代碼例子

創建一個名爲input.txt的文件有以下內容的文本

Yiibai Point is giving self learning content
to teach the world in simple and easy way!!!!!

更新main.js文件如以下代碼:

var fs = require("fs"); fs.readFile('input.txt', function (err, data) { if (err) return console.error(err); console.log(data.toString()); }); console.log("Program Ended");

現在運行main.js看到的結果:

$ node test.js

驗證輸出

Program Ended
Yiibai Point is giving self learning content
to teach the world in simple and easy way!!!!!

這兩個例子說明阻塞和非阻塞調用的概念。第一個例子說明程序塊,直到它讀取該文件,然後只前進到結束程序的地方。在第二個例子中,程序不等待文件讀取,但它只是進行打印「Program Ended」,並同時程序無阻塞繼續讀取文件。

因此,阻擋程序執行在序列,從編程點查看其更容易實現的邏輯,但非阻塞方案並不按順序執行,這樣的情況下一個程序需要使用的任何數據進行處理,它應保持使用式相同的塊,使之按順序執行。