ES12 新特性:Promise.any() 和 AggregateError

阅读时长 4 分钟读完

随着 JavaScript 的不断发展,新的特性和功能不断涌现。在 ES12 中,Promise.any() 和 AggregateError 是两个非常重要的新特性。

Promise.any()

Promise.any() 方法是一个 Promise API,它接收一个 Promise 数组,只要其中一个 Promise 成功了,就会返回这个 Promise 的结果。如果传递的 Promise 数组中的所有 Promise 都失败了,则 Promise.any() 方法会返回一个 AggregateError 对象,其中包含所有 Promise 的 rejection 原因。

这个新特性非常有用,可以用来处理多个 Promise 实例。例如,有一个搜索引擎,需要向三个不同的 API 发送请求获取搜索结果。使用 Promise.any() 方法可以使得任意一个 API 返回的结果就可以显示在页面上,而不是等待所有请求都完成才显示结果。

让我们来看一个简单的示例:

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

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

在上面的示例中,我们传递了一个包含 3 个 Promise 实例的数组。其中 promise1 和 promise3 都是失败的 Promise,而只有 promise2 是成功的 Promise。因此,我们将 promise1、promise2 和 promise3 传递给 Promise.any() 方法。因为 promise2 是成功的 Promise,所以 Promise.any() 方法将返回结果 2,而 AggregateError 对象会捕获 promise1 和 promise3 的 rejection 原因。

AggregateError

AggregateError 是一个新的内置对象,它是 Promise.all() 和 Promise.allSettled() 方法中抛出的 error 对象的一种替代方式。当 Promise.all() 和 Promise.allSettled() 方法中有一个或多个 Promise 失败而抛出错误时,它们抛出一个类似这样的 error 对象:

这个错误不会提供有关特定 Promise 拒绝原因的任何信息。而 AggregateError 对象则可以捕获多个 Promise 的 rejection 原因,并以数组的形式返回这些原因。这样,开发人员就可以更容易地了解其中所有 Promise 的拒绝原因,而不是只知道其中之一失败了。

让我们看一个示例:

在上面的示例中,我们传递了包含两个失败的 Promise 实例的数组给 Promise.all() 方法。因此,Promise.all() 方法抛出了一个 AggregateError 对象,其中包含每个 Promise 的 rejection 原因。

总结

ES12 中的 Promise.any() 和 AggregateError 是非常强大的新特性,可以大大提高开发人员的工作效率。使用 Promise.any() 可以处理多个 Promise,使得任一 Promise 成功就可以返回结果,而不必等待所有的 Promise 完成。而 AggregateError 则可以捕获多个 Promise 的 rejection 原因,使开发人员更加了解所有 Promise 的拒绝原因,从而更好地调试和处理错误。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645f62b7968c7c53b01695c7

纠错
反馈