异步函数等待异步全局变量,但返回Promise



考虑到下面的示例,我希望test函数等待1秒(实际上是这样(,然后打印正确的消息。但是,它返回一个Promise

function wait (ms) {
return new Promise((resolve, reject) => {
setTimeout(() => { resolve(`Successfully waited ${ms} ms`) }, ms)
})
}
const asyncVar = wait(1000)
async function test () {
console.log('Starting test function..')
await asyncVar
console.log(`Done waiting ${asyncVar}`) // => [object Promise]
}
test()

但是,在下面的第二个代码段示例中,如果从test函数中声明一个新变量,它将显示正确的值。


function wait (ms) {
return new Promise((resolve, reject) => {
setTimeout(() => { resolve(`Successfully waited ${ms} ms`) }, ms)
})
}
const asyncVar = wait(1000)
async function test () {
console.log('Starting test function..')
let _asyncVar = await asyncVar
console.log(`Done waiting ${_asyncVar}`) // => Successfully waited 1000 ms
}
test()

这种行为的原因是什么?

async function test () {
console.log('Starting test function..')
await asyncVar
console.log(`Done waiting ${asyncVar}`) // => [object Promise]
}

在这段代码中,${asyncVar}是一个承诺,因为您只是再次调用外部的变量";const-asyncVar=wait(1000(";,而目前这个问题还没有解决。如果你在下面写下这篇文章,你将获得想要的结果:

function wait (ms) {
return new Promise((resolve, reject) => {
setTimeout(() => { resolve(`Successfully waited ${ms} ms`) }, ms)
})
}
const asyncVar = wait(1000)
async function test () {
console.log('Starting test function..')
await asyncVar
console.log(`Done waiting ${await asyncVar}`) 
}
test()

await将保持这条线,直到承诺得到解决或拒绝。

最新更新