ES11 添加了一项新功能--Promise.allSettled()

阅读时长 4 分钟读完

JavaScript 的 Promise 对象被广泛运用于异步编程。ES11 中添加的 Promise.allSettled() 方法同时处理成功和失败的状态,能帮助开发者更好地处理并发请求中出现的异常情况。

Promise.allSettled() 的作用

在之前的版本中,Promise.all() 方法一旦有一个 Promise 对象 rejected,即出现异常,整个操作就会停止,所有结果都将被丢弃。而 Promise.allSettled() 则可以返回所有 Promise 对象的结果。

Promise.allSettled() 方法接受一个 Promise 数组作为参数,返回一个新的 Promise 对象,该 Promise 对象在所有 Promise 对象 settled(fulfilled 或 rejected)之后被 resolved。返回结果为一个数组,用于保存所有 Promise 对象的状态信息。

示例代码如下:

结果如下:

从结果可以看出,Promise.allSettled() 方法返回一个由每个 Promise 对象的 status、value 或 reason 属性组成的对象数组。其中 status 为 settled、fulfilled 或 rejected,分别代表 Promise 对象是否已 settled,已 settled 并且 Promise 对象 settled 为 fulfilled 时,value 保存 fulfilled 的结果,settled 为 rejected 时,reason 保存 rejected 的原因。

Promise.allSettled() 的状态转换图如下:

Promise.allSettled() 的意义

Promise.allSettled() 不仅可以更好地控制并发请求,避免某个请求出错导致其他请求失败,而且可以在请求全部完成后,统一对所有请求的状态进行处理及错误处理,提高代码的健壮性和可维护性。

与之前的版本相比,Promise.allSettled() 不会抛出异常,而是将异常作为一个 Promise 对象的状态来处理,使其更加友好,可读性更强,具有更好的代码质量。

Promise.allSettled()注意事项

Promise.allSettled() 方法可以避免 Promise.all() 方法因 Promise 对象中的某个 Promise 对象失败而直接抛出异常,但是 Promise.allSettled() 方法本身也可能 faced with memory consumption issue,当 Promise 对象数量非常大(即数量非常多)时,占用的内存也会变得非常大,甚至导致浏览器崩溃。

因此,在使用 Promise.allSettled() 方法时,需要注意以下几点:

  1. 优化并发请求的数量,避免大量的 Promise 对象的同时请求 2. 对已 settled 的 Promise 对象进行释放,释放内存的占用

总结

ES11 中新增的 Promise.allSettled() 方法能够更好地处理并发请求中出现的异常情况,提高代码健壮性和可维护性,具有重要的意义。同时,在使用时也需要注意一些注意事项,避免因并发请求数量过多而导致内存占用过大,最终带来更快、更高质量的前端开发。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64b2363048841e9894e7e37f

纠错
反馈