ECMAScript 2019 (ES10) 中 Promise.allSettled() 和 Promise.any() 方法详解

引言

在 ECMAScript 2019 (ES10) 中,Promise 对象引入了两个新方法,分别是 Promise.allSettled()Promise.any()。这两个方法可以帮助我们更方便地处理多个异步操作的结果,并且让我们可以更轻松地处理异常情况。本篇文章将对这两个新方法进行详细介绍,并且提供相应的示例代码。

Promise.allSettled()

Promise.allSettled() 方法会返回一个 Promise 对象,在所有给定的 Promise 对象都已经完成或已拒绝后进行处理。与 Promise.all() 不同的是,Promise.allSettled() 对于每个 Promise 对象的结果都会进行监听,即使 Promise 对象被拒绝,它也会在 Promise 链中被保留下来。Promise.allSettled() 方法的语法如下:

----------------------------

其中 iterable 是一个可以迭代的对象,例如数组。

如果所有 Promise 对象都已完成,则返回一个成功的 Promise 对象;如果任何 Promise 对象都已拒绝,则返回一个被拒绝的 Promise 对象。

返回的 Promise 对象具有以下属性:

  • status:一个字符串,其值为 "fulfilled""rejected"
  • valuereason:取决于 Promise 对象是成功的还是被拒绝的。如果 Promise 对象成功,则返回成功时的值;如果 Promise 对象被拒绝,则返回被拒绝时的原因。

下面是一个简单的示例代码,演示了如何使用 Promise.allSettled() 方法:

----- -------- - -
  -------------------
  ------------------ ----------------
  ------------------
--

----------------------------
  ------------- -- ---------------------
  ------------ -- ----------------------

上述代码的输出结果为:

-
  - ------- ------------ ------ - --
  - ------- ----------- ------- ------ ----- -- --- --
  - ------- ------------ ------ - -
-

在上面的示例代码中,Promise.allSettled() 接收一个包含三个 Promise 对象的数组。由于第二个 Promise 对象被拒绝了,所以返回的结果中包含了一个 status 属性值为 "rejected" 的对象,它的 reason 属性是被拒绝的原因。

Promise.any()

Promise.allSettled() 不同,Promise.any() 方法会在给定的 Promise 对象中至少有一个已经成功的情况下,返回一个成功的 Promise 对象。如果没有 Promise 对象成功,则返回一个被拒绝的 Promise 对象。Promise.any() 方法的语法如下:

---------------------

同样,iterable 是一个可以迭代的对象。

如果任何一个 Promise 对象成功,则返回一个成功的 Promise 对象,其值为成功的 Promise 对象的值;否则,返回一个被拒绝的 Promise 对象,其原因是所有 Promise 对象被拒绝时的异常。如果传递的迭代对象为空,则返回的 Promise 对象将永远处于挂起状态。

下面是一个简单的示例代码,演示了如何使用 Promise.any() 方法:

----- -------- - -
  ------------------ -----------------
  -------------------
  ------------------ ----------------
--

---------------------
  ------------ -- --------------------
  ------------ -- ----------------------

上述代码的输出结果为:

-

在上面的示例代码中,Promise.any() 接收一个包含三个 Promise 对象的数组。由于第二个 Promise 对象成功了,所以返回的结果是成功的 Promise 对象的值。

结论

Promise.allSettled()Promise.any() 是 ECMAScript 2019 (ES10) 新增的两个非常有用的方法。使用这两个方法可以帮助我们更方便地处理多个异步操作的结果,并且处理异常情况时更加灵活。在实际应用中,我们可以根据具体的业务需求,选取适合自己的方法,从而优化我们的开发效率和用户体验。

参考资料

  1. Promise.allSettled() - JavaScript | MDN
  2. Promise.any() - JavaScript | MDN

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6718fa30ad1e889fe22f3bb6