[英]Accessing the value of a setTimeout promise without awaiting it
我正在编写一些代码来模拟我只想进行一次的数据库调用,并将结果存储在地图中(以防止重复往返)。
我的代码似乎工作正常,但我得到了一个意想不到的结果:当我删除一个等待值(在下面突出显示)时,代码似乎在等待承诺的解决(因为 console.log 仍然等待 5秒),但记录的值仍然是一个 Promise。
在我看来,这似乎不一致,所以我认为我对 Promise 的理解可能有所欠缺。
const inputs = ['a', 'b'];
let promiseOrValue
async function processor(input){
if (promiseOrValue){
await promiseOrValue
}
else {
promiseOrValue = asyncFunction()
await promiseOrValue
}
console.log(`${input} ${**await** promiseOrValue}`)
}
async function asyncFunction(){
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('resolving')
resolve('foo')
}, 1000)
})
}
inputs.forEach(processor)
我希望 console.log 会立即用[object Promise]
打印,或者它会等待 5 秒并打印foo
。 实际上,它等待 5 秒,然后打印[object Promise]
。
问题是您已等待promiseOrValue
但不要将其返回数据分配给任何变量。 因此该过程将暂停,直到promiseOrValue
完成。
await promiseOrValue;
您需要删除await
才能不暂停您的进程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.