Promise 是 JavaScript 中处理异步操作的一种方式,它提供了一种简单、直接的方式来处理异步操作。在 Promise 中,我们使用一组接口来处理异步操作的状态,以及获取异步操作的结果。虽然 Promise 本身是一个强大的工具,但是一些扩展方法可以使其更加强大,同时也更方便使用和维护。
Promise.finally()
Promise.finally() 方法用于指定一个在 Promise 对象完成之后会被执行的回调函数。该回调函数会在任何情况下都会被执行,无论 Promise 是否成功或失败,以及是否调用了 catch() 方法。
----- - - ------------------- ---------- -- ----------------- ----------- -- ------------------------
输出结果为:
- -------
我们可以看到在 Promise 成功后,finally() 方法也被执行了。如果 Promise 失败或未调用 catch() 方法,finally() 方法仍然会被执行。
Promise.allSettled()
Promise.allSettled() 方法接受一组 Promise 对象,并返回一个新的 Promise 对象。当所有 Promise 对象都已经被 settled(即已经成功或失败)后,该新的 Promise 对象会被 resolved,返回一个包含了所有 Promise 对象的结果数组。
----- -- - ------------------- ----- -- - ------------------ ----- -- - ------------------- ----------------------- --- ---- ------------- -- ----------------------
输出结果为:
- - ------- ------------ ------ - -- - ------- ----------- ------- - -- - ------- ------------ ------ - - -
我们可以看到结果数组中包含了所有 Promise 对象的结果状态和值,以及失败的原因。
Promise.any()
Promise.any() 方法接受一组 Promise 对象,并返回一个新的 Promise 对象。当其中任意一个 Promise 对象成功后,该新的 Promise 对象会被 resolved,返回该 Promise 对象的值。如果所有 Promise 对象都失败,则该新的 Promise 对象也会被 rejected。
----- -- - ------------------ ----- -- - ------------------- ----- -- - ------------------ ---------------- --- ---- ------------ -- -------------------- ------------ -- --------------------
输出结果为:
-
我们可以看到 Promise.any() 方法在 p2 成功后被 resolved,并返回 p2 的值。
Promise.race()
Promise.race() 方法接受一组 Promise 对象,并返回一个新的 Promise 对象。当其中任意一个 Promise 对象 settled(即已经成功或失败)后,该新的 Promise 对象会被 resolved 或 rejected,返回该 Promise 对象的结果或失败原因。
----- -- - --- --------------- -- ------------- -- ----------- ------- ----- -- - --- --------------- -- ------------- -- ----------- ------- ----------------- ---- ------------ -- -------------------- ------------ -- --------------------
输出结果为:
-
我们可以看到 Promise.race() 方法在 p1 成功后被 resolved,并返回 p1 的值。
总结
使用 Promise 扩展方法可以使 Promise 更加强大和方便使用,同时也能提高代码的可读性和维护性。我们可以根据应用场景和需求来灵活选择不同的扩展方法,并合理使用它们,以达到更好的开发效果和用户体验。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/653e55077d4982a6eb7dac9c