日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
詳解Node.js中的回調(diào)函數(shù)

回調(diào)函數(shù)是指 使用者自己定義一個(gè)函數(shù),實(shí)現(xiàn)這個(gè)函數(shù)的程序內(nèi)容,然后把這個(gè)函數(shù)(入口地址)作為參數(shù)傳入別人(或系統(tǒng))的函數(shù)中,由別人(或系統(tǒng))的函數(shù)在運(yùn)行時(shí)來(lái)調(diào)用的函數(shù),下面為大家詳細(xì)講解一下Node.js中的回調(diào)函數(shù)。

成都創(chuàng)新互聯(lián)是一家專業(yè)提供吉安企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為吉安眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。

同樣,在Node.js中,比如I/O操作發(fā)生的地方,經(jīng)常使用回調(diào)模式。通過(guò)在回調(diào)函數(shù)中嵌套回調(diào)函數(shù),可以控制事情的順序(使用回調(diào)的根本出發(fā)點(diǎn)),比如從數(shù)據(jù)庫(kù)讀取數(shù)據(jù)后通過(guò)回調(diào)用另一個(gè)函數(shù)處理數(shù)據(jù)。

以下是一個(gè)最簡(jiǎn)單的例子:

function a() {
   return 1
}

function b(aa) {
   return 2 + aa
}

//調(diào)用:
var c=0
c = b(a()) //A是個(gè)函數(shù),但它又作為一個(gè)參數(shù)在B函數(shù)中被調(diào)用
console.log(c) //結(jié)果顯示3

以上例子極易理解,下面再引入另一個(gè)概念:異步

看以下代碼:

var a = 0

function bb(x) {
   console.log(x)
}

function timer(time) {
   setTimeout(function () {
       a=6
   }, time);
}

//調(diào)用:
console.log(a)
timer(3000)
bb(a)

以上代碼很簡(jiǎn)單,我們需要的邏輯是,全局變量a初值為0,然后過(guò)3秒后,讓它為6,然后再打印出來(lái),看上去,上面的代碼沒(méi)有問(wèn)題,理論上符合我們的邏輯需求,但卻發(fā)現(xiàn)結(jié)果是這樣:

0
0

咋回事?

因?yàn)镴S是一種異步執(zhí)行語(yǔ)言,盡管timer函數(shù)內(nèi)讓a=6了,但是JS不會(huì)死等時(shí)間結(jié)束再跳出函數(shù),而是馬上就會(huì)執(zhí)行下一步語(yǔ)句(即調(diào)用bb函數(shù)),但這時(shí)候3秒鐘根本就沒(méi)結(jié)束,a還沒(méi)有被重新賦值,所以打印出來(lái)還是為0。

用回調(diào)函數(shù)可以解決這個(gè)問(wèn)題:

var a = 0

function bb(x) {
   console.log(x)
}

function timer(time, callback) {
   setTimeout(function () {
       a = 6
       callback(a);
   }, time);
}

//調(diào)用:
console.log(a)
timer(3000,bb)

這次,在timer函數(shù)中添加了一個(gè)關(guān)鍵字callback,意思就是說(shuō)此處不是一個(gè)普通的參數(shù),而是一個(gè)函數(shù)名,打起精神,關(guān)鍵的地方來(lái)了:

一般而言,函數(shù)的形參是指由外往內(nèi)向函數(shù)體傳遞變量的入口,但此處加了callback后則完全相反,它是指函數(shù)體在完成某種使命后調(diào)用外部函數(shù)的出口!這時(shí)候應(yīng)該明白什么叫”回調(diào)”了吧,也就是回頭調(diào)用外部函數(shù)的意思。

在本例中,當(dāng)3秒鐘到了后,首先a=6,然后通過(guò)關(guān)鍵字callback(a)調(diào)用了函數(shù)bb(x),結(jié)果顯示:

0
6

這個(gè)邏輯,符合我們的需求。

在寫法上,也可以不需要定義函數(shù)bb, 直接在調(diào)用timer的時(shí)候?qū)懗蒮unction形式,把調(diào)用部分改成這樣也可以,效果完全一樣:

console.log(a)
timer(3000, function (x) {
   console.log(x)
})

這種寫法函數(shù)名都不需要了(術(shù)語(yǔ)稱為”匿名函數(shù)”),在nodejs代碼中更為常見也更好理解,翻譯成自然語(yǔ)言就是:定時(shí)3秒,完成后再回頭調(diào)用function(x)里面的內(nèi)容。

nodejs編程中大量使用了異步編程技術(shù),這是為了高效使用硬件,同時(shí)也可以不造成同步阻塞。其實(shí)nodejs在底層還是通過(guò)多線程技術(shù)實(shí)現(xiàn)的異步操作,但普通用戶并不需要深究它的實(shí)現(xiàn)方法,我們只要做好我們的異步處理即可。


名稱欄目:詳解Node.js中的回調(diào)函數(shù)
網(wǎng)頁(yè)地址:http://www.dlmjj.cn/article/dpdceps.html