在开发 Web 应用程序时,经常需要处理多个异步操作。在 JavaScript 中,我们通常使用 Promise 来处理异步操作。ES11 增加了一个新的 Promise.allSettled 方法,以提供更好的错误处理方式。
Promise.allSettled 方法
Promise.allSettled 方法接收一个 Promise 数组,返回一个新的 Promise。新的 Promise 将在所有传入的 Promise 都为 settled 状态后解决。将解决值作为数组返回,数组包含所有 Promise 的结果,包括已解决和已拒绝状态。
Promise.allSettled 方法的语法如下:
Promise.allSettled(iterable)
这里的 iterable 是一个 Promise 数组。
Promise.allSettled 方法示例
下面是 Promise.allSettled 方法使用示例:
const promise1 = Promise.resolve(3); const promise2 = Promise.resolve(4); const promise3 = Promise.reject('Error'); Promise.allSettled([promise1, promise2, promise3]) .then(results => results.forEach(result => console.log(result.status)))
输出:
fulfilled fulfilled rejected
在上面的示例中,前两个 Promise 分别解决为已解决状态,而第三个 Promise 解决为已拒绝状态。
Promise.allSettled 方法的错误处理
Promise.allSettled 方法对于一组异步操作的完整性检查非常有用,因为它会等待所有操作完成后一起返回结果。但这也意味着在多个异步操作中,如果有一个操作出错,则整个操作都会拒绝。
在上面的示例中,第三个 Promise 返回的是一个错误。如果我们使用 Promise.all 方法,则整个操作都会被拒绝,因为其中一个操作失败了。但是,在使用 Promise.allSettled 方法时,即使其中一个操作失败,整个操作也会继续执行,并返回一组包含全部结果的对象数组。
因此,需要在结果后面添加错误处理程序。我们可以使用 JavaScript 的异常处理方法,如 try-catch 语句来处理错误。
下面是一个示例:
-- -------------------- ---- ------- ----- -------- - --- ----------------- ------- -- - ------------- -- - --------------------- -- ------ --- ----- -------- - --- ----------------- ------- -- - ------------- -- - ---------- -------------------- -- ------ --- ----------------------------- ---------- ------------ -- - --- - ----- ------ - ------------------ -- - -- ------------- --- ------------ - ------ ------------ - ---- - ----- --- -------------------- - --- -------------------- - ----- --- - ----------------- - --
在上面的示例中,我们将 Promise.allSettled 方法返回的值的处理程序放在 try-catch 语句中。在 try 块中,我们将状态为已解决的值添加到结果数组中,否则我们将抛出错误。在 catch 块中,我们将捕获错误并将其打印到控制台中。
结论
ES11 中的 Promise.allSettled 方法提供了更完整的错误处理方法,以应对多个异步操作的情况。在使用 Promise.allSettled 方法时,请确保添加适当的错误处理程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6748ebbb93696b02680765c6