const add = (n1, n2, callback) => {
setTimeout(() => {
const sum = n1 n2
callback(sum)
},2000)}
add(1, 4, (sum) => {
console.log(sum) // Should print: 5
})
我知道 setTimeout 函式將在 Node API 堆疊中注冊,然后在時間完成后在回呼佇列中注冊。我的問題是呼叫'add'函式時呼叫堆疊的外觀如何?假設它決議了一個新函式。以及呼叫“回呼”函式時呼叫堆疊和回呼佇列的外觀?
uj5u.com熱心網友回復:
對于將來看到這個問題的任何人,我已經弄清楚了。我使用 Google chrome 瀏覽器提供的 node 開發工具來查看幕后發生的一切。似乎在 main() 程式完成并且計時器結束后,回呼函式被呼叫到回呼佇列,并且呼叫它的父函式的“閉包”(“添加”函式),以及該閉包包含提供的引數,包括“匿名”箭頭函式。計算總和后,呼叫回呼函式并決議資料。然后“閉包”從父函式中拉出箭頭函式并使用從回呼中決議的資料執行它。
我希望這可以幫助任何有類似問題的人!
uj5u.com熱心網友回復:
您可以通過以下方式輕松檢查回呼堆疊
throw new Error()
在傳遞的函式中。當我這樣做時,它似乎給出了:
Error
at .../callback.js:10:8
at Timeout._onTimeout (.../callback.js:4:3)
at listOnTimeout (node:internal/timers:557:17)
at processTimers (node:internal/timers:500:7)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/448904.html
標籤:javascript 节点.js 异步 打回来 调用栈
上一篇:如何等待異步操作回圈?[復制]
