对于语句,await可以考虑将后续语句放入.then中。
await对表达式的工作方式类似吗?
例如,在阻止p1的解析进度之前,以下是否阻止了p2的解析进度?
const p1 = Promise.resolve()
const p2 = Promise.resolve()
return [await p1, await p2]发布于 2020-02-29 22:18:00
await适用于所有表达式。在x是表达式的情况下,await x也是一个有效的表达式(异步解析)。这一表述也可能是一种独立的陈述,也可能不是。
但是,请记住,awaits总是按顺序处理的。你的
return [await p1, await p2]`将等待p1解析,然后等待p2解析,然后返回包含这两个解析值的数组。通常,在这种情况下,您可能希望使用Promise.all来代替:
return Promise.all([p1, p2])如果你不这样做,你可能会遇到未经处理的拒绝--例如,如果p2拒绝而不是await__ed
(async () => {
const p1 = new Promise(res => setTimeout(res, 1000));
const p2 = new Promise((res, rej) => setTimeout(rej));
return [await p1, await p2];
})()
.catch(() => {
console.log('error caught');
});
window.addEventListener('unhandledrejection', () => {
console.log('unhandled rejection; p2 was not being awaited at the time it rejected');
});
(另外,如果您有一个函数调用返回一个承诺,而不是已经存在的承诺,Promise.all方法将更快地解析,因为它将等待这些承诺并行地解决)
https://stackoverflow.com/questions/60470078
复制相似问题