前言
当我们需要进行多个异步操作时,会使用 Promise.all() 来等待所有异步操作完成并返回结果。然而,Promise.all() 在遇到一个 Promise 出现异常被 reject 时,就会直接 reject,导致其他 Promise 也被终止,而开发者难以知道哪个 Promise 出现了异常。
为了解决这个问题,ECMAScript 2019 新增了 Promise.allSettled() 方法,该方法会等待所有的 Promise 都执行完成,不管它们是 fulfill 还是 reject,最终会返回一个由每个 Promise 执行结果组成的数组。
Promise.allSettled() 的使用方法
Promise.allSettled() 方法接受一个 Promise 数组作为参数,语法如下:
Promise.allSettled(promises)
其中,promises 是一个 Promise 对象数组。
Promise.allSettled() 将返回一个 Promise 对象,当所有 Promise 都执行完毕时,这个 Promise 对象会 resolve,返回一个由每个 Promise 执行结果组成的数组,数组中每个元素都是一个对象,对象的格式如下:
{ status: "fulfilled" | "rejected", value: result }
对象中 status 字段表示 Promise 的状态,值为 "fulfilled" 表示 Promise 被 fulfill,值为 "rejected" 表示 Promise 被 reject;value 字段表示 Promise 的返回值或错误信息。
Promise.allSettled() 的示例代码
假设我们要同时进行两个 Promise,一个 Promise 返回 "Hello, Promise!",另一个 Promise 返回一个错误:
const promise1 = Promise.resolve("Hello, Promise!"); const promise2 = Promise.reject(new Error("Promise rejected!")); Promise.allSettled([promise1, promise2]) .then(results => console.log(results)) .catch(error => console.error(error.message));
输出结果如下:
[ {status: "fulfilled", value: "Hello, Promise!"}, {status: "rejected", value: Error: Promise rejected! at <anonymous>:2:26} ]
我们可以看到,虽然 promise2 是 reject 的,但还是会在结果数组中出现,并显示错误信息。
结论
通过使用 Promise.allSettled() 方法,我们可以一次性处理所有的异步操作,而不用担心其中某个操作出现错误导致其他操作无法正确执行的问题。在代码中使用该方法能帮助开发者轻松处理异步请求异常情况,提高代码的可靠性和健壮性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66fa605c44713626014bdb67