🤝 JavaScript 中的 Promise.allSettled() 与 Promise.all() 🍭

2025-06-07

🤝 JavaScript 中的 Promise.allSettled() 与 Promise.all() 🍭

你好!🧑‍🌾

自 ES2015 以来,Promise 可用来简化异步操作的处理。

让我们发现两个 Promise 及其区别:

它们都接受一个iterable并返回一个array包含已实现的承诺。

❓ 那么,它们之间有什么区别

Promise.all() 🧠

Promise .all()方法将可迭代的承诺作为输入,并返回一个可解析为输入承诺结果数组的 Promise。

承诺一切

全部解决

如你所见,我们向 Promise.all 传递了一个数组。当三个 Promise 全部解析后,Promise.all 也会解析,并在控制台输出结果。

现在,我们来看看一个 Promise 是否未 resolve,也就是被 rejection 了。输出是什么?🛑

承诺全部失败

1 失败

Promise.all如果至少有一个元素被拒绝,则被拒绝。例如,我们传递了 2 个会立即解析的 Promise 和一个会立即拒绝的 Promise,那么它们Promise.all会立即拒绝。

Promise.allSettled() 🦷

自 ES2020 起,您可以使用Promise.allSettled。它返回一个承诺,该承诺始终在所有给定的承诺均已履行或拒绝后才会解决,并带有一个对象数组,每个对象描述每个承诺的结果。

对于每个结果对象,status都有一个字符串:

  • fulfilled
  • rejected

价值(或原因)反映了每个承诺被履行(或拒绝)的价值。

仔细查看结果数组的以下属性( status,, ) valuereason

全部解决

差异👬

  • 只要数组中的一个 Promise 拒绝,Promise.all就会拒绝。
  • Promise.allSettled永远不会拒绝,一旦数组中的所有 Promise 都被拒绝或解决,它就会解决。

支持的浏览器🚸

JavaScript Promise.allSettled()Promise.all()方法支持的浏览器如下:

  • 谷歌浏览器
  • 微软 Edge
  • 火狐浏览器
  • 苹果Safari浏览器
  • 歌剧

干杯🍻🍻🍻

如果您喜欢这篇文章,您可以在Twitter或dev.to上关注我,我会定期发布与 HTML、CSS 和 JavaScript 相关的简短技巧。

文章来源:https://dev.to/viclafouch/promise-allsettled-vs-promise-all-in-javascript-4mle
PREV
在 React 中创建延迟承诺钩子
NEXT
👑 使用 React Hooks、Firebase 和 Seald 创建安全的聊天应用程序 🔐