ECMAScript 2021(ES12) 已经发布许久,其中最引人注目的更新之一就是 Promise.any() 方法。这个方法允许开发者在多个 Promise 中选择最快完成的Promise并返回其值,它的实现是非常简单而有效的。
Promise.any() 方法是什么?
Promise.any() 方法接受一个 Promise 可迭代对象(比如一个 Array 或一个 Set),并返回一个 Promise,并且它会解析一个或多个 Promise,在任何一个 Promise 成功时返回该Promise的值。
如果所有 Promise 都失败,它将拒绝以返回一个错误。
Promise.any() 方法与 Promise.race() 方法有何不同?
Promise.any() 方法和 Promise.race() 都是用于处理多个 Promise 的方法。然而,两种方法之间存在明显的区别:
- Promise.race() 会返回第一个 fulfil 的 Promise 的值,无论是成功还是失败。
- Promise.any() 只会在至少有一个 Promise 被解析为 fulfilled 状态的时候才会返回。
Promise.any() 实现的示例代码
这里我们通过一个使用 Promise.any() 实现的代码示例来说明:
----- -------- - - ---------------------- ------ --- --------------- -- ------------- -- ----------------- ------- --- --------------- -- ------------- -- ----------------- ----- -- --------------------- ----------- -- ------------------- -- -- ------- ------------ -- ---------------------- -- ----- --- --------------
在上面的示例中,我们创建了一个数组,其中包含三个Promise:两个定时解析的 Promises 和一个拒绝的 Promise。正如我们所期望的,当第二个带有 'Hello' 的 Promise 被解析为 fulfilled 状态时,Promise.any() 方法将返回它。
使用 Promise.any() 方法
使用 Promise.any() 方法可能是一项有用的特性,特别是当你需要同时请求多个数据源或者执行多个异步操作时。
----- ----------- - ----------------------------------------- ----- ----------- - ----------------------------------------- ----- ----------- - ---------------------------------------- ------------------------- ------------ ------------- -------------- -- - -- ---------------------------------------------------------- --- --- - ------ ---------------- - -- ----------------------------------------------------------------- --- --- - ------ ---------------- - ------ ---------------- -- ---------- -- ------------------ ------------ -- ----------------------
在这个示例中,我们利用了 Promise.any() 的特性,同时获取了 HTML、JSON 新增的 API 数据源和文本文件。无论这些请求的顺序如何,Promise.any() 只会返回最先完成的 Promise 并组合该 Promise 的数据。
结论
Promise.any() 是一个非常有用的方法,它可以大大简化处理多个 Promise 的代码,同时也可以更有效地管理异步操作。如果你需要在其中一个 Promise 完成时将结果返回给用户,那么这是一个非常有用的方法。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/672d70f09303ae9a008e3db4