【发布时间】:2021-05-09 19:16:47
【问题描述】:
我注意到来自MDN 的并发承诺示例:
async function foo() {
const p1 = new Promise((resolve) => setTimeout(() => resolve('1'), 1000))
const p2 = new Promise((_,reject) => setTimeout(() => reject('2'), 500))
const results = [await p1, await p2];
}
foo().catch(() => {}) // Attempt to swallow all errors...
MDN 声明:
在以下代码中,将抛出未处理的承诺拒绝错误,即使 .catch 处理程序已在承诺链中进一步配置。这是因为在控制权从 p1 返回之前,p2 不会“连接”到承诺链中。
这究竟是什么意思?如果await 等待p1 的承诺首先解决,那么为什么p2 会出现拒绝错误?我对异步函数非常陌生,感谢任何新见解!
【问题讨论】:
标签: javascript asynchronous concurrency promise