前言:本文基于ES12标准,主要探讨Promise.allSettled()方法的应用及其原理,同时提供实际使用案例。
Promise.all()方法被广泛使用于并行异步请求的场景中,其返回一个Promise对象,当所有的Promise对象完成时,才会执行then()方法;当其中一个Promise对象发生错误时,将直接执行catch()方法。
但这种方式有一个明显的缺点:当其中一个请求失败时,剩余的请求也会被中断。
Promise.allSettled()方法则解决了这种缺陷,它返回的结果不是一个错误,而是一个对象数组,对象数组的每一个元素都是一个对象。如果该Promise对象被解决,那么对象将拥有一个status属性值为 "fulfilled",并且还将包含一个value属性,该属性包含了该Promise对象的解决值。如果该Promise对象被拒绝,则对象将拥有一个status属性值为 "rejected",并且将包含一个reason属性,该属性包含了拒绝的错误。
这种方式下,即使其中有一个请求失败,剩余的请求也不会被中断。
下面展示一个简单的示例:
-- -------------------- ---- ------- ----- --- - ---- ----------------- ------- -- - ------------- -- - ---------------- --- -- ----- --- --- ----------------- ------- -- - ------------- -- - --------------- --- -- ----- --- --- ----------------- ------- -- - ------------- -- - ---------------- --- -- ----- --- ---------------------------------- -- - ---------------- --
打印出的对象数组为:
[ {status: 'fulfilled', value: 'Promise 1'}, {status: 'rejected', reason: 'Promise 2'}, {status: 'fulfilled', value: 'Promise 3'} ]
在实际开发中,可以使用Promise.allSettled()方法来进行一些数据的校验操作。例如,我们需要从服务器端获取多个数据并进行判断,这时就可以使用Promise.allSettled()方法,当所有数据获取成功时,再将结果进行处理。下面展示一个不完整的示例:
-- -------------------- ---- ------- ----- --------- - ----- -- -- - ----- ------ ----- - ----- ------------------------------- ------------ -- ------------ --- ----------- - -- ---- - ---- - -- ------ - - ----- -------- - ----- -- -- - -- ------- - ----- -------- - ----- -- -- - -- ------- -
总结:ES12的Promise.allSettled()方法为我们在并行异步请求的场景中提供了更加灵活的选择,同时也让我们的代码更加简洁明了。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/652fb7817d4982a6eb0e6bdd