Node.js | Callback(回調函數概念)
簡介
回調是一個異步等效的功能。在完成特定任務回調函數被調用。Node
大量使用了回調。Node
的所有的API
都支持回調這樣的一種方式。
例如:我們可以一邊讀取文件,一邊執行其他指令,在文件讀取完成後,我們將文件內容作為回調函數的參數返回。這樣在執行程式時就沒有阻塞或等待文件I/O
操作。這就大大提高了Node.js
的性能,可以處理大量的並發請求。
回調函數一般作為函數的最後一個參數出現:
1 | function foo1(name, age, callback) { } |
範例說明
阻塞程式範例
首先在目錄下建立一個input.txt
檔。
內容輸入:
1 | J.J.'s Blogs 技術筆記 http://localhost:4000/ |
在建立main.js
檔。
程式碼如下:
1 | var fs = require("fs"); |
執行結果:
1 | $ node main.js |
非阻塞程式範例
首先在目錄下建立一個input.txt
檔。
內容輸入:
1 | J.J.'s Blogs 技術筆記 http://localhost:4000/ |
在建立main.js
檔。
程式碼如下:
1 | var fs = require("fs"); |
執行結果:
1 | $ node main.js |
總結
以上兩個範例我們了解了阻塞與非阻塞調用的不同。
第一個範例在文件讀取完後才執行程序。
第二個範例我們不需要等待文件讀取完,這樣就可以在讀取文件時同時執行接下來的程式,大大提高了程序的性能。
因此,阻塞是按順序執行的,而非阻塞是不需要按順序的,所以如果需要處理回調函數的參數,我們就需要寫在回調函數內。
註:以上參考了
Node.js 回调函数