【发布时间】:2019-10-02 01:28:03
【问题描述】:
当我为我的项目设计一些需要实现的逻辑原型时,我注意到 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
我期待两个函数的行为相似,因为异步函数本质上返回一个承诺。有人能解释一下为什么会这样吗?
【问题讨论】:
-
你在使用
new运算符吗? -
哎呀,这是一个错字。我的坏
-
[...] since async function essentially returns a promise.[...]这是什么意思?唯一带有async关键字的函数是run。callYou既不是async也不是返回 Promise。
标签: javascript node.js async-await