Promise.allSettled 是 ECMAScript 2021(ES12)中新增的 Promise 方法,它在 Promise.all 的基础上做了一些改善。在本文中,我们将深入了解 Promise.allSettled 的详细内容,以及学习如何在实际开发中使用它。
Promise.all 和 Promise.allSettled 的区别
在介绍 Promise.allSettled 之前,我们需要先了解 Promise.all 的原理。
Promise.all 接受一个 Promise 对象数组作为参数,然后返回一个新的 Promise 对象。只有当参数中所有的 Promise 对象都成功地执行了,这个新的 Promise 对象才会被成功地执行;反之,只要有一个 Promise 对象出现了错误,就会立即被拒绝。
而 Promise.allSettled 则在 Promise.all 的基础上做了一些改善。它接受一个 Promise 对象数组作为参数,然后返回一个新的 Promise 对象。与 Promise.all 不同的是,Promise.allSettled 不管每个 Promise 对象的状态是成功还是失败,都会等待它们全部执行完毕才会返回结果。这样可以确保每个 Promise 对象都得到了处理,并且在新的 Promise 对象中返回它们所有的状态信息。这些状态信息包括:
- status:表示 Promise 对象的状态,可以是 "fulfilled"(已完成)或 "rejected"(已拒绝)。
- value:表示已完成的 Promise 对象的返回值,如果状态是 "rejected",则该属性是 undefined。
- reason:表示已拒绝的 Promise 对象的原因,如果状态是 "fulfilled",则该属性是 undefined。
因此,如果我们需要知道每个 Promise 对象的最终状态,我们应该使用 Promise.allSettled,而不是 Promise.all。
Promise.allSettled 的用法
Promise.allSettled 的语法与 Promise.all 类似,例如:
const promise1 = Promise.resolve(1); const promise2 = Promise.reject("error"); const promise3 = Promise.resolve(3); Promise.allSettled([promise1, promise2, promise3]).then(results => { console.log(results); });
期望的输出是:
[ {status: "fulfilled", value: 1}, {status: "rejected", reason: "error"}, {status: "fulfilled", value: 3} ]
如上所示,Promise.allSettled 返回的结果是一个 Promise 对象。当所有 Promise 对象都被处理完毕时,它将被解析为一个数组,其中包含每个 Promise 对象的状态信息。
Promise.allSettled 在实际开发中的应用
在实际开发中,我们可以使用 Promise.allSettled 来处理多个异步操作,并获得每个操作的最终状态。例如,在处理多个 API 请求时,我们可以使用 Promise.allSettled 来检查每个请求是否成功,并且分别对它们进行处理。示例代码如下:
// javascriptcn.com 代码示例 const promises = [ fetch("/api/users"), fetch("/api/posts"), fetch("/api/comments") ]; Promise.allSettled(promises).then(results => { results.forEach(result => { if(result.status === "fulfilled") { console.log(result.value); } else { console.log(result.reason); } }); });
如上所示,我们可以使用 Promise.allSettled 和 fetch API 来处理多个 API 请求。在结果数组中,我们可以检查每个请求的状态,并根据需要处理每个请求的结果。这种方法可以帮助我们更好地处理多个异步操作,并以最佳方式进行错误处理。
总结
ES12 中的 Promise.allSettled 方法可以帮助我们更好地处理多个异步操作,以及更好地了解每个操作的最终状态。在实际开发中,我们可以使用它来处理多个 API 请求,并根据需要进行错误处理。掌握 Promise.allSettled 的原理和用法是非常重要的,因为它可以大大提高我们的代码质量和效率。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/654450de7d4982a6ebe31e6f