介绍
Promise 是 JavaScript 中的异步编程模式,它可以更优秀地处理异步操作,让代码更加简洁和易读。Promise.all() 方法可以同时处理多个 Promise 对象,当所有 Promise 对象都成功返回后,Promise.all() 才会返回结果;如果其中某一个 Promise 对象出现了错误或者超时,它会立即返回错误或者超时信息。
ES10 中新增加了 Promise.allSettled() 方法,主要用于并行运行多个 Promise 对象,并返回每个 Promise 对象的结果(无论成功或失败)。Promise.allSettled() 接收一个包含 Promise 对象的数组作为参数,返回一个包含该数组中每个 Promise 对象的结果的数组。
语法
Promise.allSettled(iterable)
- iterable: 一个包含 Promise 对象的可迭代对象。
返回值
Promise.allSettled() 返回一个 Promise 对象。当该数组中的所有 Promise 对象都完成时,该 Promise 对象则会 resolve 并返回一个包含所有 Promise 对象的结果的数组。每个结果都是一个带有 status 和 value 或者 reason 属性的对象。
- status:即完成状态,它是一个字符串,只能是 "fulfilled" 或者 "rejected"。
- value 或者 reason:表示 Promise 执行的结果。如果 status 是 "fulfilled",则这个值表示 Promise 的 resolve() 方法的返回值;如果 status 是 "rejected",则这个值表示 Promise 的 reject() 方法的返回值。
示例
以下是一个使用 Promise.allSettled() 方法的示例代码。假设需要异步请求三个 API,获取它们的数据并一起处理,用 Promise.allSettled() 方法就可以同时处理这三个 Promise 对象。
// javascriptcn.com 代码示例 const api1 = fetch('https://example.com/api1'); const api2 = fetch('https://example.com/api2'); const api3 = fetch('https://example.com/api3'); Promise.allSettled([api1, api2, api3]) .then(results => { results.forEach(result => { if (result.status === 'fulfilled') { console.log('fulfilled: ', result.value); } else { console.log('rejected: ', result.reason); } }); });
上述代码中,使用了 fetch() 函数来获取 API 数据,它是一个返回 Promise 对象的函数。在 Promise.allSettled() 方法中,使用包含三个 Promise 对象的数组作为参数,当这三个 API 数据都返回后,Promise.allSettled() 方法会返回一个结果数组,其中每个结果对象都包含了对应 API 返回的数据或错误信息。
总结与指导
Promise.allSettled() 方法的出现为我们提供了更加灵活的异步编程方式,让我们在处理多个 Promise 对象时可以同时获取它们的成功或失败结果。在实际开发中,需要注意的是,Promise.allSettled() 方法会等待所有 Promise 对象都完成后才会返回结果,这可能会影响整个应用的性能。所以在使用 Promise.allSettled() 方法时,需要确保 Promise 对象的数量和处理时间都可以接受,以避免出现性能问题。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6549ed747d4982a6eb422b12