繁体   English   中英

无需等待即可访问 setTimeout 承诺的值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM