我有一种情况,我想在三元操作符中使用 await。我想根据一个条件,将一个值设置为一个字面值或一个承诺的resolve值。希望下面的代码能帮助描述我想做的事情,但我很确定它不正确,所以把它当作伪代码。
const val = checkCondition ? "literal value" : await promiseGetValue();
其中 promiseGetValue()返回一个承诺,该承诺解析为一个文字值。正确的做法是什么?
这实际上是一种有效的语法,只是为了清楚起见,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()
条件操作符期望 表情 作为操作数,而 await value
是一个有效的表达式。
因此,如果在一个异步函数中使用,或者在支持顶层的模块的顶层中使用 await
(其中 await
是有效的),你的代码是完全有效的。
我不能说什么了。
你可以使用这种语法,但是你应该总是在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()