亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Node.js中的回調函數怎么用

發布時間:2022-01-21 10:36:06 來源:億速云 閱讀:176 作者:iii 欄目:開發技術

這篇文章主要介紹了Node.js中的回調函數怎么用的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Node.js中的回調函數怎么用文章都會有所收獲,下面我們一起來看看吧。


Node.js中的回調函數怎么用

同樣,在Node.js中,比如I/O操作發生的地方,經常使用回調模式。通過在回調函數中嵌套回調函數,可以控制事情的順序(使用回調的根本出發點),比如從數據庫讀取數據后通過回調用另一個函數處理數據。

以下是一個最簡單的例子:

function a() {
   return 1
}function b(aa) {
   return 2 + aa
}

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

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

看以下代碼:

var a = 0function bb(x) {
   console.log(x)
}function timer(time) {
   setTimeout(function () {
       a=6
   }, time);
}

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

以上代碼很簡單,我們需要的邏輯是,全局變量a初值為0,然后過3秒后,讓它為6,然后再打印出來,看上去,上面的代碼沒有問題,理論上符合我們的邏輯需求,但卻發現結果是這樣:

0
0

咋回事?

因為JS是一種異步執行語言,盡管timer函數內讓a=6了,但是JS不會死等時間結束再跳出函數,而是馬上就會執行下一步語句(即調用bb函數),但這時候3秒鐘根本就沒結束,a還沒有被重新賦值,所以打印出來還是為0。

用回調函數可以解決這個問題:

var a = 0function bb(x) {
   console.log(x)
}function timer(time, callback) {
   setTimeout(function () {
       a = 6
       callback(a);
   }, time);
}

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

這次,在timer函數中添加了一個關鍵字callback,意思就是說此處不是一個普通的參數,而是一個函數名,打起精神,關鍵的地方來了:

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

在本例中,當3秒鐘到了后,首先a=6,然后通過關鍵字callback(a)調用了函數bb(x),結果顯示:

0
6

這個邏輯,符合我們的需求。

在寫法上,也可以不需要定義函數bb, 直接在調用timer的時候寫成function形式,把調用部分改成這樣也可以,效果完全一樣:

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

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

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

關于“Node.js中的回調函數怎么用”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Node.js中的回調函數怎么用”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乐陵市| 公主岭市| 莱芜市| 奉新县| 天台县| 滦平县| 剑河县| 西丰县| 东源县| 巴楚县| 杭锦后旗| 海南省| 渭南市| 台中市| 灵武市| 安国市| 呼伦贝尔市| 稷山县| 汤原县| 丰县| 英德市| 平湖市| 金门县| 万州区| 海丰县| 土默特右旗| 宁化县| 正宁县| 临沂市| 景宁| 辽中县| 葵青区| 西峡县| 皮山县| 荥阳市| 历史| 弋阳县| 津市市| 玛纳斯县| 华蓥市| 涞源县|