首页 > web前端 > js教程 > Promise.all 如何改进并发等待执行和错误处理?

Promise.all 如何改进并发等待执行和错误处理?

Mary-Kate Olsen
发布: 2024-12-11 16:15:11
原创
738 人浏览过

How Can Promise.all Improve Concurrent Await Execution and Error Handling?

并发Await执行:克服顺序执行

问题:

在传统异步编程中,多个await操作并发执行由于顺序受阻

原因:

相关代码等待第一个等待操作完成,然后再启动第二个。

建议的解决方案:

在单独等待 Promise 之前获取 Promise 的最初建议确实允许并行执行。但是,它引入了错误处理和潜在的未处理拒绝错误的问题。

推荐方法:

我们建议使用 Promise.all,而不是建议的解决方案:

const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]);
登录后复制

的好处Promise.all:

  • 启动所有提供的 Promise 的并行执行。
  • 正确处理拒绝,避免未处理的拒绝错误。
  • 提供更简洁和与建议的语法相比一致

示例:

考虑以下示例,该示例演示了计时和错误处理方面的差异:

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板