随着 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 对象:
Error: Promise rejected with no or falsy reason
这个错误不会提供有关特定 Promise 拒绝原因的任何信息。而 AggregateError 对象则可以捕获多个 Promise 的 rejection 原因,并以数组的形式返回这些原因。这样,开发人员就可以更容易地了解其中所有 Promise 的拒绝原因,而不是只知道其中之一失败了。
让我们看一个示例:
const promise1 = Promise.reject('Error 1'); const promise2 = Promise.reject('Error 2'); Promise.all([promise1, promise2]) .catch((error) => { console.log(error instanceof AggregateError); // true console.log(error.errors); // [Error: Error 1, Error: Error 2] });
在上面的示例中,我们传递了包含两个失败的 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