Promise 是前端开发中常用的异步处理方式,它可以优雅的解决回调地狱的问题,改善代码可读性。而 ECMAScript 2020 新增加的 Promise.allSettled 方法让 Promise 更加灵活,使得开发更加容易。
Promise.allSettled 方法的作用
Promise.allSettled 方法接收一个 Promise 数组作为参数,返回一个 Promise 对象,当 Promise 数组中所有 Promise 对象都被处理后,返回一个新 Promise 对象。新 Promise 对象采用 Promise.allSettled 方法参数 Promise 数组中所有 Promise 对象的状态。
Promise.allSettled 可以解决 Promise.all 方法只要有一个 Promise 对象失败就会退出的问题,因为 Promise.allSettled 方法会等待所有 Promise 对象的状态都被处理完。
Promise.allSettled 方法的用法
以下是 Promise.allSettled 方法的基本用法:
const promise1 = Promise.resolve(1); const promise2 = Promise.resolve(2); const promise3 = Promise.reject(3); Promise.allSettled([promise1, promise2, promise3]).then((results) => { console.log(results); });
Promise.allSettled 方法会等待所有 Promise 对象被处理完并返回一个信息数组
[ { status: "fulfilled", value: 1 }, { status: "fulfilled", value: 2 }, { status: "rejected", reason: 3 } ]
在数组中,每个对象包含以下属性:
status
:Promise 对象的状态,可能为fulfilled
或rejected
value
:状态为fulfilled
时返回的值,否则为undefined
reason
:状态为rejected
时的错误原因,否则为undefined
在状态为 rejected
时,Promise.allSettled 并不会中断执行。因此,在异步请求中,可以使用该方法来确保所有请求都能得到处理结果,而不会因为某个请求失败而中断后续请求的处理。
Promise.allSettled 方法的兼容性
目前,Promise.allSettled 方法还不是所有浏览器都支持。但可以通过 polyfill 的方式实现。
以下是一个简单的 polyfill 实现:
-- -------------------- ---- ------- -- --------------------- - ------------------ - ---------- -- ------------ ---------------------- -- ------- ------------- -- -- ------- ------------ ----- --- --------------- -- -- ------- ----------- ------ --- - -- -
总结
Promise.all 方法在处理一组并发请求时非常有用,而 Promise.allSettled 的出现,让我们在遇到其中一个请求失败时不需要抛出异常。
技术开发是一个不断进步和深耕的过程,对于前端开发人员而言,ECMAScript 新特性是需要持续学习和掌握的一部分。Promise.allSettled 方法的应用灵活性提高了 Promise 的效率,使得开发变得更加容易。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64d0cac0b5eee0b5257cb4e3