我在Chrome控制台上尝试了这个:
const foo = async () => 1;
const bar = async () => 2;
(await 1) ? foo() : bar();
结果是1。
你能解释一下吗?是不是假设要退回承诺?
答案 0 :(得分:2)
await
通过调用Promise.resolve(operand)
强制承诺的非承诺操作数。所以
(await 1)
成为
(await Promise.resolve(1))
和Promise.resolve(1)
返回值为1的承诺。
await返回后(异步 - 在promise作业队列*中执行作业后),三元表达式被评估为
1 ? foo() : bar() // calls foo()
await
运算符的优先级似乎与其他一元运算符的优先级相同。
*注意await
永远不会在事件循环的同一个调用中继续执行,即使它正在等待的承诺已经完成:它总是在事件循环的另一个调用中返回。
答案 1 :(得分:1)
答案 2 :(得分:0)
await期望异步函数作为参数,它会暂停操作,直到返回异步函数中的promise。在你的情况下,1是表达式,因此它立即返回。现在你的三元运算符将1作为表达式,这在JavaScript的逻辑中是正确的。这将触发你的第一个功能,即foo 所以你的结果将是1