1. 程式人生 > >5、Node.js 回調函數

5、Node.js 回調函數

spa 留言 urn 異步化 實現 郵箱 return cti 註冊

內容:回調函數;阻塞/同步、非阻塞、和異步區別;阻塞和非阻塞代碼實例

Node.js 回調函數
Node.js 異步編程的直接體現就是回調。
異步編程依托於回調來實現,但不能說使用了回調後程序就異步化了。
回調函數在完成任務後就會被調用,Node 使用了大量的回調函數,Node 所有 API 都支持回調函數。
例如,我們可以一邊讀取文件,一邊執行其他命令,在文件讀取完成後,我們將文件內容作為回調函數的參數返回。這樣在執行代碼時就沒有阻塞或等待文件 I/O 操作。這就大大提高了 Node.js 的性能,可以處理大量的並發請求。

阻塞/同步:打一個電話一直到有人接為止
非阻塞:打一個電話沒人接,每隔10分鐘再打一次,知道有人接為止
異步:打一個電話沒人接,轉到語音郵箱留言(註冊),然後等待對方回電(call back)


####################################################################################
阻塞代碼實例
input.txt:love A

var fs = require("fs");
var data = fs.readFileSync(‘input.txt‘);
console.log(data.toString());
console.log("程序執行結束!");

執行結果:
love A
程序執行結束!

####################################################################################
非阻塞代碼

var fs = require("fs");
function foo(err, data) {
    if (err) return
console.error(err); console.log(data.toString()); } fs.readFile(‘input.txt‘,foo); console.log("程序執行結束!");

執行結果:
程序執行結束!
love A


回調函數一般作為參數的最後一個參數出現:
function foo1(name, age, callback) { }
function foo2(value, callback1, callback2) { }
像上面的例子

這個還不是很明白,這裏看到阻塞的代碼,readFileSync,sync這個應該是同步的方法,所以一定要執行完畢,第二個例子的readFile是異步的方法,不阻塞,直接進行下一個步驟。

5、Node.js 回調函數