2020-02-23

Node.js回調(diào)函數(shù)

Node.js異步編程的直接體現(xiàn)就是回調(diào)

異步編程依托于回調(diào)來(lái)實(shí)現(xiàn),但不能說(shuō)使用了回調(diào)后程序就異步化了。

回調(diào)函數(shù)在完成任務(wù)后就會(huì)被調(diào)用,Node使用了大量的回調(diào)函數(shù),Node所有API都支持回調(diào)函數(shù)

例如,我們可以一邊讀取文件,一邊執(zhí)行其他命令,我們將文件內(nèi)容作為回調(diào)函數(shù)的參數(shù)返回。這樣執(zhí)行代碼時(shí)就沒(méi)有阻塞或等待文件I/O操作。這就提高了Node.js的性能,可以處理大量的并發(fā)請(qǐng)求。

回調(diào)函數(shù)一般作為函數(shù)的最后一個(gè)參數(shù)出現(xiàn):

function foo1(name,age,callback){ }
function foo2(value,callback,callback2){ }

阻塞代碼實(shí)例:

創(chuàng)建一個(gè)文件input.txt,內(nèi)容如下:
菜鳥教程官網(wǎng)地址:www.runoob.com
創(chuàng)建main.js文件,代碼如下:
var fs = require("fs");
var data = fs.readFileSync('input.txt');
console.log(data.toString());
console.log("程序執(zhí)行結(jié)束!");

非阻塞代碼實(shí)例:

創(chuàng)建一個(gè)文件input.txt

####### 創(chuàng)建main.js文件,代碼如下:

$ node main js
//程序執(zhí)行結(jié)束!

總結(jié):以上兩個(gè)實(shí)例我們了解了阻塞與非阻塞調(diào)用的不同。第一個(gè)實(shí)例在文件讀取完后才執(zhí)行程序。第二個(gè)實(shí)例我們不需要等待文件讀取完,這樣就可以在讀取文件同時(shí)執(zhí)行下來(lái)的代碼,大大提高了程序的性能

因此,阻塞是按順序執(zhí)行的,而非阻塞是不需要按順序的,所以如果需要回調(diào)函數(shù)的參數(shù),我們就需要在回調(diào)函數(shù)內(nèi)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容