在 JavaScript 中,Promise 是一种异步编程的解决方案,它可以避免回调地狱和深度嵌套的代码结构。ES6 中引入了 Promise,使得异步编程变得更加简单和优雅。而在 ES12 中,新增了一个 Promise.allSettled() 方法,它可以用于处理一组异步任务并返回它们的状态和结果。
Promise.allSettled() 方法的作用
Promise.allSettled() 方法可以接受一个包含多个 Promise 实例的数组,并返回一个新的 Promise 实例。这个新的 Promise 实例会在数组中所有的 Promise 都结束时才会被 fulfilled,并返回一个包含每个 Promise 状态和结果的数组。该数组中的每个元素都会包含一个 status
属性和一个 value
或 reason
属性:
- 如果 Promise 被 fulfilled,
status
属性的值为'fulfilled'
,并且value
属性包含 Promise 的结果; - 如果 Promise 被 rejected,
status
属性的值为'rejected'
,并且reason
属性包含 Promise 的错误信息。
Promise.allSettled() 方法的语法
Promise.allSettled() 方法的语法如下:
Promise.allSettled(iterable);
参数 iterable
是一个可迭代对象,它可以是一个数组、一个 Set 对象等,包含多个 Promise 实例。
Promise.allSettled() 方法的返回值
Promise.allSettled() 方法返回一个 Promise 实例。当 iterable 中所有 Promise 都结束时,返回的 Promise 实例状态为 fulfilled,返回一个包含每个 Promise 状态和结果的数组。
Promise.allSettled() 方法的使用案例
下面我们来看一个使用 Promise.allSettled() 方法的案例。假设我们有一个包含多个异步请求的数组,我们可以使用 Promise.allSettled() 方法同时处理这些异步请求,并统计它们的状态和结果:
// javascriptcn.com 代码示例 const urls = [ 'https://api.github.com/users/octocat', 'https://api.github.com/users/octocat/followers', 'https://api.github.com/users/octocat/repos', ]; const requests = urls.map((url) => fetch(url)); Promise.allSettled(requests) .then((results) => { results.forEach((result) => { if (result.status === 'fulfilled') { console.log(result.value); } else { console.error(result.reason); } }); }) .catch((error) => console.error(error));
上述代码中,我们使用 map() 方法将各个异步请求转换为 Promise 实例,并将它们存储在 requests 数组中。然后,我们使用 Promise.allSettled() 方法同时处理这些异步请求,并在它们结束后打印它们的状态和结果。如果有任何一个请求发生了错误,我们将会打印出错误信息。
Promise.allSettled() 方法可以确保在请求完成前不会发生任何错误,同时可以检查每个请求的状态和结果,让代码更加健壮和可靠。
总结
本文介绍了 ES12 中新增的 Promise.allSettled() 方法的作用、语法以及使用案例。Promise.allSettled() 方法可以用于处理一组异步任务并返回它们的状态和结果。使用 Promise.allSettled() 方法可以使你的代码更加简洁、健壮和可靠。希望本文对你理解和掌握 Promise.allSettled() 方法有所帮助。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/654af3b17d4982a6eb4e8baa