Promise.all 与 Promise.allSettled:一次取数的小差别,救了我的接口

JavaScript 给了我们强大的并发原语;在恰当时机选用恰当工具,才是高级开发者的分水岭。 如果你的应用频繁并行请求、或依赖并不稳的端点,不妨试试 ​​Promise.allSettled​​——也许它也会拯救你的 API。

引子

同时并发调用一堆 API,既迅速优雅。把所有请求塞进 Promise.all,点一下部署,你会觉得自己就是 JavaScript 摇滚明星。 然而,一个细小的失败就足以拖垮全局——我就亲历了这场事故。

这篇文章会把 Promise.all 和 Promise.allSettled 的关键差异讲清楚,并解释我如何因为切换到后者,躲过了一次“无声灾难”。

场景设定

我在做一个仪表盘,需要从多个微服务并发拉数据:

const [user, orders, notifications] = await Promise.all([
  getUser(),
  getOrders(),
  getNotifications(),
]);

一切都很顺利——直到某个接口开始间歇性失败。 当其中任意一个 Promise 拒绝时,整组调用立刻崩溃:没有兜底、没有部分数据、只有报错。

轮到 Promise.allSettled 登场

与“有一个失败就整体拒绝”的 Promise.all 不同,Promise.allSettled 会等全部 Promise 结束,并返回每一项的状态与结果/原因。

const results = await Promise.allSettled([
  getUser(),
  getOrders(),
  getNotifications(),
]);

results.forEach(result => {
  if (result.status === 'fulfilled') {
    console.log('Success:', result.value);
  } else {
    console.warn('Failed:', result.reason);
  }
});

这样我就可以:

  • 渲染部分数据(谁成功就先展示谁);
  • 标注失败模块(告诉用户哪个小部件挂了);
  • 有选择地重试(只重试失败的那几项)。

因此,应用的韧性更强,用户体验也更友好。尽管如此,要注意状态分支处理更细,代码上需要明确区分 fulfilled / rejected;与此同时,日志与监控也要跟上,避免悄悄失败。

要点小结

  • Promise.all:只要有一个失败立刻 reject,其余结果不再等待。
  • Promise.allSettled:全部等待完成,返回每一项的 { status, value | reason }
  • 使用建议

所有步骤必须成功(如登录流程的多步校验、事务性写入)→ 用 **Promise.all**,失败要尽快中断。

允许部分失败(如仪表盘多部件、侧边小组件、可降级内容加载)→ 用 **Promise.allSettled**,容错更合适。

进一步的实战提示

1.选择性重试

const results = await Promise.allSettled(tasks);
const failed = results
  .map((r, i) => [r, i])
  .filter(([r]) => r.status === 'rejected')
  .map(([, i]) => tasks[i]);

if (failed.length) {
  // 退避重试或队列重放
  await Promise.allSettled(failed.map(backoffRetry));
}

2.保持响应可用即使部分失败,也返回带缺口的 UI(骨架屏/占位符),并附带“刷新/重试”入口,因此用户不会看到空白或整页报错。

3.区分“硬必需”与“软可选”把关键数据(必须成功)与附加数据(可失败)拆分,前者走 Promise.all,后者走 Promise.allSettled,从而保证核心路径确定性

结语

JavaScript 给了我们强大的并发原语;在恰当时机选用恰当工具,才是高级开发者的分水岭。 如果你的应用频繁并行请求、或依赖并不稳的端点,不妨试试 Promise.allSettled——也许它也会拯救你的 API

AI大模型学习福利

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。


因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

四、AI大模型商业化落地方案

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值