问题:
在传统异步编程中,多个await操作并发执行由于顺序受阻
原因:
相关代码等待第一个等待操作完成,然后再启动第二个。
建议的解决方案:
在单独等待 Promise 之前获取 Promise 的最初建议确实允许并行执行。但是,它引入了错误处理和潜在的未处理拒绝错误的问题。
推荐方法:
我们建议使用 Promise.all,而不是建议的解决方案:
const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]);
的好处Promise.all:
示例:
考虑以下示例,该示例演示了计时和错误处理方面的差异:
const getValue1Async = () => { return new Promise(resolve => { setTimeout(resolve, 500, "value1"); }); }; const getValue2Async = () => { return new Promise((resolve, reject) => { setTimeout(reject, 100, "error"); }); }; // Sequential execution with proposed solution (async () => { try { console.time("sequential"); const p1 = getValue1Async(); const p2 = getValue2Async(); const value1 = await p1; const value2 = await p2; } catch (e) { console.error(e); } console.timeEnd("sequential"); })(); // Concurrent execution with Promise.all setTimeout(async () => { try { console.time("concurrent"); const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]); } catch (e) { console.timeEnd("concurrent", e); } }, 1000);
在在顺序执行示例中,代码等待 500 毫秒以完成第一个操作,然后再启动第二个操作。相比之下,并发执行示例在 100ms 后立即处理第二个操作的失败。
以上是Promise.all 如何改进并发等待执行和错误处理?的详细内容。更多信息请关注PHP中文网其他相关文章!