🤝 JavaScript 中的 Promise.allSettled() 与 Promise.all() 🍭
你好!🧑🌾
自 ES2015 以来,Promise 可用来简化异步操作的处理。
让我们发现两个 Promise 及其区别:
它们都接受一个iterable
并返回一个array
包含已实现的承诺。
❓ 那么,它们之间有什么区别?
Promise.all() 🧠
Promise .all()
方法将可迭代的承诺作为输入,并返回一个可解析为输入承诺结果数组的 Promise。
如你所见,我们向 Promise.all 传递了一个数组。当三个 Promise 全部解析后,Promise.all 也会解析,并在控制台输出结果。
现在,我们来看看一个 Promise 是否未 resolve,也就是被 rejection 了。输出是什么?🛑
Promise.all
如果至少有一个元素被拒绝,则被拒绝。例如,我们传递了 2 个会立即解析的 Promise 和一个会立即拒绝的 Promise,那么它们Promise.all
会立即拒绝。
Promise.allSettled() 🦷
自 ES2020 起,您可以使用Promise.allSettled
。它返回一个承诺,该承诺始终在所有给定的承诺均已履行或拒绝后才会解决,并带有一个对象数组,每个对象描述每个承诺的结果。
对于每个结果对象,status
都有一个字符串:
fulfilled
✅rejected
❌
价值(或原因)反映了每个承诺被履行(或拒绝)的价值。
仔细查看结果数组的以下属性( status
,, ) value
。reason
差异👬
- 只要数组中的一个 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