在 ES2020 中,JavaScript 新增了两个全局 Promise 选项:Promise.any 和 Promise.allSettled。这两个方法都是 Promise.all 和 Promise.race 的补充,提供了更加灵活和细粒度的 Promise 处理方式,让开发者能够更好地控制 Promise 的处理逻辑。
Promise.any
Promise.any 表示任意一个 Promise 状态变为 resolve,就 resolve;如果所有 Promise 都变为 reject,就 reject。Promise.any 结果的返回值是第一个 resolve 的 Promise 的值。
Promise.any([Promise1, Promise2, Promise3])
.then(result => {
console.log(result);
})
.catch(error => {
console.log(error);
});如果 Promise1 变为 resolve,就会直接执行 then 方法里面的代码,输出 Promise1 的值;反之,如果 Promise1, Promise2 和 Promise3 都变为 reject,就会执行 catch 方法里面的代码,输出错误信息。
Promise.allSettled
Promise.allSettled 和 Promise.all 不同的地方在于,即使其中某些 Promise 被 reject,它也始终会返回一个数组。数组中的每个元素都代表了对应 Promise 的状态信息(fulfilled 或 rejected)以及值(如果 fulfilled)或原因(如果 rejected)。
const promises = [fetch('/api/user'), fetch('/api/post'), fetch('/api/comment')];
Promise.allSettled(promises)
.then(results => {
console.log(results);
});如果其中某些 Promise 被 reject,它也始终会返回一个数组。数组中的每个元素都代表了对应 Promise 的状态信息(fulfilled 或 rejected)以及值(如果 fulfilled)或原因(如果 rejected)。
总结
ES2020 中的 Promise.any 和 Promise.allSettled 都是非常实用的全局 Promise 选项,可以让我们更加灵活地处理 Promise,并且在处理超时、故障和请求需求时提供更精细和细致的控制。使用这两个方法需要注意它们的实现方式和使用场景,可以帮助我们更好地完成需求功能。
以下是一个完整的示例代码:
-- -------------------- ---- -------
----- -------- - -
--------------------
-----------------------
-------------------
--
---------------------
------------ -- -
--------------------
--
------------ -- -
-------------------
---
----------------------------
------------- -- -
---------------------
---Source: FunTeaLearn,Please indicate the source for reprints https://funteas.com/post/64851bdf48841e989440a8b2