善用 ES8 的 Promise.allSettled() 解决 promise.all() 的缺陷
在前端开发中,我们经常需要处理异步操作,而 Promise 是一种非常常用的异步编程解决方案。Promise.all() 方法是一个非常实用的方法,它可以将多个 Promise 实例包装成一个新的 Promise 实例,等待所有 Promise 实例都完成后,返回一个包含所有 Promise 结果的数组。但是,Promise.all() 方法也有一些缺陷,它会在任何一个 Promise 实例出错时立即结束,并返回错误信息。这时,我们可以使用 ES8 中新增的 Promise.allSettled() 方法来解决这个问题。
Promise.allSettled() 方法会等待所有 Promise 实例都完成后,返回一个包含所有 Promise 结果的数组,不管 Promise 实例是成功还是失败,都会在结果数组中进行标记,标记成功的 Promise 实例的结果为 {status: 'fulfilled', value: Promise.resolve()},标记失败的 Promise 实例的结果为 {status: 'rejected', reason: Promise.reject()}。这样,我们就可以很方便地处理 Promise 实例的结果,而不需要担心 Promise 实例出错导致整个 Promise.all() 方法立即结束。
下面是一个使用 Promise.allSettled() 方法的示例代码:
// javascriptcn.com 代码示例 const promises = [ Promise.resolve(1), Promise.reject('error'), Promise.resolve(2) ]; Promise.allSettled(promises) .then(results => { results.forEach(result => { if (result.status === 'fulfilled') { console.log(result.value); } else { console.log(result.reason); } }); });
在上面的代码中,我们创建了一个包含三个 Promise 实例的数组,其中第二个 Promise 实例是一个失败的实例。我们使用 Promise.allSettled() 方法将这三个 Promise 实例包装成一个新的 Promise 实例,并等待它们全部完成。当所有 Promise 实例完成后,我们遍历结果数组,并根据每个 Promise 实例的状态输出相应的结果。
总结:
Promise.allSettled() 方法是一个非常实用的方法,它可以解决 Promise.all() 方法在处理多个 Promise 实例时出错导致整个方法立即结束的问题。我们可以使用 Promise.allSettled() 方法来处理多个 Promise 实例的结果,并根据每个 Promise 实例的状态进行相应的处理。在实际开发中,我们应该善用 Promise.allSettled() 方法,提高代码的健壮性和可靠性。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653bbf2c7d4982a6eb60b4ec