javascript - wait 和三元运算符之间的优先级

标签 javascript async-await ternary

我用 Chrome 控制台尝试了这个:

const foo = async () => 1;
const bar = async () => 2;
(await 1) ? foo() : bar();

结果是1。

您能解释一下吗?它不是应该返回一个 Promise 吗?

最佳答案

await 通过调用 Promise.resolve(operand) 将非 Promise 操作数强制为 Promise。所以

 (await 1)

变成

 (await Promise.resolve(1))

Promise.resolve(1) 返回一个值为 1 的 promise 。

await 返回后(异步 - 在 promise 作业队列*中执行作业后),三元表达式的计算结果为

 1 ? foo() : bar()  // calls foo()

await 运算符的优先级似乎与其他一元运算符的优先级相同。

*注意 await 永远不会在事件循环的同一个调用中继续执行,即使它正在等待的 Promise 已经实现:它总是在事件循环的另一个调用中返回。

关于javascript - wait 和三元运算符之间的优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48088381/

相关文章:

javascript - 我怎样才能将数组减半

Java - 检查 Not Null/Empty 否则分配默认值

javascript - 何时在 AngularJS 中使用 PATCH 和 PUT

javascript - 触发缩放事件(或模拟缩放事件)

c# - 转换/包装一个使用回调的 "classic"异步方法

node.js - 在 Node.js 中使用 async/await 处理 promise 拒绝的正确方法是什么?

c# - 调试 .NET Async/Await 函数时无法检查变量

python - 这种三元条件有更好的解决方案吗?

javascript - 具有多个变量的三元运算符

javascript - 在 IntelliJ IDEA 14.0.3 中找不到 JavaScript "Alignment"设置