简介
Promise.any 是 ES11 新增的方法,它接受包含多个 Promise 对象的可迭代对象,并返回一个新的 Promise 对象。如果可迭代对象中的任意一个 Promise 对象成功解决,则新 Promise 对象也将被解决。否则,新 Promise 对象将被拒绝,并提供一个 AggregateError 实例来表示所有 Promise 对象的拒绝原因。
用法
Promise.any 方法可以用于我们需要并行处理多个任务并只关心有一个任务成功返回结果的情况,比如请求不同的 API 地址获取数据,只需要保证至少有一个请求成功返回数据即可。
---------------------------------- -- - -- ---------- ----- ----------------- -- - -- ---------- ------ ---
Promise.any 方法接受一个可迭代对象,这个可迭代对象包含多个 Promise 对象。它返回的 Promise 对象有以下特点:
- 如果可迭代对象中至少有一个 Promise 对象成功解决,则新 Promise 对象也将被解决,并返回第一个成功解决的 Promise 的解决值。
- 如果可迭代对象中所有 Promise 对象都被拒绝了,则新 Promise 对象也将被拒绝,并提供一个 AggregateError 实例来表示所有 Promise 对象的拒绝原因。
- 如果可迭代对象不包含任何 Promise 对象,则返回一个被拒绝的 Promise 对象,抛出 TypeError。
示例
----- ----- - ---- -- --- --------------- -- ------------------- ----- ----- -------- - - ------------------ -- ------ -------- ------------------ -- ------ -------- ------------------ -- ------ ------- -- ---------------------------------- -- - ------------------- ----------------- -- - ---------------------- --- -- -- ------ ------
以上代码定义了三个 Promise 对象,分别模拟了不同延时的异步操作,并将它们放入一个数组中。调用 Promise.any 方法,并通过 then 方法获取解决值或通过 catch 方法处理拒绝原因。
意义
Promise.any 方法的出现是为了解决 Promise.all 方法的一些限制。在 Promise.all 方法中,只有所有 Promise 对象都成功解决了,新 Promise 对象才会被解决,并返回所有 Promise 对象的解决值。但如果其中有一个 Promise 对象被拒绝了,整个 Promise 链都将失败,而且只能通过 catch 获取拒绝原因。
而 Promise.any 方法则更加优秀的解决了这个问题,它只需要一个成功的 Promise 就可以解决整个 Promise 对象的解析,并返回最先解决的 Promise 对象的解决值。对于某些情况,我们并不需要所有的异步操作都成功,只需要至少一个成功即可。
结论
Promise.any 提供了一种简单的方式来处理并行处理多个异步操作,并只需要关注一个操作成功所返回的数据。如果你需要在前端开发中并行处理多个操作,并只需要至少一个操作成功所返回的数据,Promise.any 方法就是你的解决方案。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6729605a2e7021665e2445f5