LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

Promise.allSettled():一行代码干掉 Promise.all,JavaScript 异步编程的终极简化!

admin
2025年10月28日 23:35 本文热度 138

处理异步操作已经成为了 JavaScript 日常编码的核心部分。随着应用复杂度的增加,我们经常需要并发执行多个异步任务并合理处理它们的结果。长期以来,Promise.all() 一直是我们处理并发 Promise 的首选方法,但它存在一个致命缺陷:一旦任何一个 Promise 被拒绝(rejected),整个操作就会失败。

Promise.all 的局限性

让我们先回顾一下 Promise.all() 的工作方式及其局限性:

const promises = [
 fetch('/api/users'),
 fetch('/api/products'),
 fetch('/api/orders')
];

Promise.all(promises)
  .then(results => {
    // 处理所有成功结果
    const [users, products, orders] = results;
    // 进一步处理数据
  })
  .catch(error => {
    // 如果任何一个 Promise 失败,就会执行这里
    console.error('至少有一个请求失败:', error);
    // 但我们不知道哪些请求成功了,哪些失败了
  });

这种方法的主要问题在于:

  • 任何一个 Promise 失败都会导致整个操作失败
  • 你无法知道哪些操作成功,哪些失败
  • 你无法获取成功操作的结果

在实际应用中,我们通常希望即使某些操作失败,也能继续处理成功的结果。例如,在加载仪表板组件时,即使某个组件的数据获取失败,我们也希望显示其他组件。

Promise.allSettled() 解决了上述所有问题。它会等待所有 Promise 完成(无论成功或失败),并返回一个包含每个 Promise 结果的数组:

const promises = [
 fetch('/api/users').then(r => r.json()),
 fetch('/api/products').then(r => r.json()),
 fetch('/api/orders').then(r => r.json())
];

Promise.allSettled(promises)
  .then(results => {
    results.forEach((result, index) => {
      if (result.status === 'fulfilled') {
        console.log(`Promise ${index} 成功:`, result.value);
      } else {
        console.log(`Promise ${index} 失败:`, result.reason);
      }
    });
    
    // 你可以处理所有成功的结果,同时了解哪些失败了
    const successfulData = results
      .filter(result => result.status === 'fulfilled')
      .map(result => result.value);
      
    // 处理成功获取的数据
    processData(successfulData);
  });

Promise.allSettled 返回值结构

Promise.allSettled() 的返回值是一个数组,每个元素对应一个 Promise 的结果,具有以下结构:

  • 对于成功的 Promise:{ status: 'fulfilled', value: 结果值 }
  • 对于失败的 Promise:{ status: 'rejected', reason: 错误原因 }

这种统一的结构使得处理结果变得简单明了。尤其在需要并发执行多个独立异步操作,并且希望无论个别操作成功与否都能获取完整结果的场景中,Promise.allSettled() 无疑是最佳选择。它使我们能够构建更具弹性的应用程序,优雅地处理现实世界中不可避免的错误和异常情况。


阅读原文:原文链接


该文章在 2025/10/29 18:43:27 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved