簡體   English   中英

Node.js:帶/不帶 Promise 的異步等待

[英]Node.js: async-await with/without Promise

當我為我的項目設計一些需要實現的邏輯原型時,我注意到 async-await 和 Promise 的一些有趣行為。

// Notice this one returns a Promise
var callMe = function(i) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            console.log(i)
            resolve(`${i} is called :)`)
        }, (i+1)*1000)
    })  
}

// But this one doesn't
var callYou = function(i) {
    setTimeout(() => {
        console.log(i)
    }, (i+1)*1000)
}

async function run() {
    console.log("Start")
    for(let i = 0; i < 3; i++) {
        let val = await callYou(i)
         # also try with callMe()
         #let val = await callMe(i)
        console.log(val)
    }
    console.log("End")
}

run()

使用let val = await callYou(i) ,結果看起來像這樣

Start
callYou()
callYou()
callYou()
End
0
1
2

而使用let val = await callMe(i) ,結果看起來像這樣

Start
0
0 is called :)
1
1 is called :)
2
2 is called :)
End

我期待兩個函數的行為相似,因為異步 function 基本上返回 promise。 有人可以解釋為什么會這樣嗎?

async函數返回承諾,但callYoucallMeasync函數,即使它們在哪里,當回調傳遞到setTimeout function 時,當 function 返回時callYou將被實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM