Javascript在三元操作符中使用单次等待的方式

问题描述 投票:0回答:2

我有一种情况,我想在三元操作符中使用 await。我想根据一个条件,将一个值设置为一个字面值或一个承诺的resolve值。希望下面的代码能帮助描述我想做的事情,但我很确定它不正确,所以把它当作伪代码。

const val = checkCondition ? "literal value" : await promiseGetValue();

其中 promiseGetValue()返回一个承诺,该承诺解析为一个文字值。正确的做法是什么?

javascript async-await es6-promise conditional-operator
2个回答
3
投票

这实际上是一种有效的语法,只是为了清楚起见,u可以用括号将 await promiseGetValue()包围起来,这里是这种语法的一个演示。

const returnPromise = () => Promise.resolve('world')
const f = async () => {
   const x = true ? 'hello' : await returnPromise()
    const y = false ? 'hello' : await returnPromise()
    console.log(x,y)

}
f()

2
投票

条件操作符期望 表情 作为操作数,而 await value 是一个有效的表达式。

因此,如果在一个异步函数中使用,或者在支持顶层的模块的顶层中使用 await (其中 await 是有效的),你的代码是完全有效的。

我不能说什么了。


1
投票

你可以使用这种语法,但是你应该总是在async函数中使用await,你可以从你等待的函数中返回任何值(不一定是promise,但是在没有返回promise的函数中使用await是没有意义的)。

function promiseGetValue() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve('any value')
        })
    })
}
const flag = false
async function main() {
    const val = flag ? "literal value" : await promiseGetValue();
    console.log(val)
}
main()
© www.soinside.com 2019 - 2024. All rights reserved.