在 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 的值。
---------------------- --------- ---------- ------------ -- - -------------------- -- ------------ -- - ------------------- ---
如果 Promise1 变为 resolve,就会直接执行 then 方法里面的代码,输出 Promise1 的值;反之,如果 Promise1, Promise2 和 Promise3 都变为 reject,就会执行 catch 方法里面的代码,输出错误信息。
Promise.allSettled
Promise.allSettled 和 Promise.all 不同的地方在于,即使其中某些 Promise 被 reject,它也始终会返回一个数组。数组中的每个元素都代表了对应 Promise 的状态信息(fulfilled 或 rejected)以及值(如果 fulfilled)或原因(如果 rejected)。
----- -------- - -------------------- ------------------- ----------------------- ---------------------------- ------------- -- - --------------------- ---
如果其中某些 Promise 被 reject,它也始终会返回一个数组。数组中的每个元素都代表了对应 Promise 的状态信息(fulfilled 或 rejected)以及值(如果 fulfilled)或原因(如果 rejected)。
总结
ES2020 中的 Promise.any 和 Promise.allSettled 都是非常实用的全局 Promise 选项,可以让我们更加灵活地处理 Promise,并且在处理超时、故障和请求需求时提供更精细和细致的控制。使用这两个方法需要注意它们的实现方式和使用场景,可以帮助我们更好地完成需求功能。
以下是一个完整的示例代码:
----- -------- - - -------------------- ----------------------- ------------------- -- --------------------- ------------ -- - -------------------- -- ------------ -- - ------------------- --- ---------------------------- ------------- -- - --------------------- ---
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64851bdf48841e989440a8b2