Promise(承诺)是 JavaScript 中处理异步操作的一种方式,它是一种封装异步操作并返回结果的对象。ES9 中的 Promise 标准对象进行了一些改进和扩展,使其更加灵活和便利,本文将对其进行详细介绍。
Promise 基本原理
Promise 对象有三种状态:pending、fulfilled 和 rejected,分别表示等待中、已完成和已拒绝。在创建 Promise 对象时,传入的函数(称为执行器)会被立即执行,并将重要函数 resolve 和 reject 传递给执行器。在适当的时候,执行器应该调用其中一个函数以将 Promise 对象从待处理状态转换为已处理状态。resolve 函数会将 Promise 标记为已完成,并返回结果;reject 函数会将 Promise 标记为已拒绝,并返回错误信息。
ES9 中的 Promise 扩展
Promise.finally
Promise.finally 方法在执行 Promise 最终状态前执行,无论 Promise 对象的状态是 fulfilled 还是 rejected,该方法总是会被执行。Promise.finally 方法接受一个回调函数作为参数,并返回一个新的 Promise 对象,该新 Promise 对象的状态和值与原始 Promise 对象一致。
----- - - --- ------------------------ -- - ------------- -- - ----------------- -- ------ --- ------------ -- - -------------------- ----------- -- ----------- -- - ------------------- -- ----- -- ---------- -- - ----------------- ---
Promise.allSettled
Promise.allSettled 方法接受一个 Promise 对象数组,返回一个 Promise 对象,该 Promise 对象的处理结果将遵循以下规则:
- 所有 Promise 对象都被处理(即变为 fulfilled 或 rejected 状态)后,返回的 Promise 对象才会被处理
- 如果所有 Promise 对象都已经变为 fulfilled 状态,则返回的 Promise 对象的状态变为 fulfilled,并且它的值是一个包含所有处理结果对象的数组
- 如果任何 Promise 对象都变为 rejected 状态,则返回的 Promise 对象的状态变为 fulfilled,它的值是一个包含所有处理结果对象的数组
----- -------- - - -------------------------- ---------- ------------------ --------------- ----------- ------------------------ --------- --------- -- ---------------------------- ------------- -- - --------------------- -- ------------ -- - ------------------- ---
Promise.any
Promise.any 方法接受一个 Promise 对象数组,只要有一个 Promise 对象变为 fulfilled 状态,返回的 Promise 对象就将立即处理并将其标记为已完成状态,它的值为第一个变为 fulfilled 状态的 Promise 对象的值。如果所有 Promise 对象都变为 rejected 状态,则 asny 将返回一个错误,它的值是由所有错误组成的数组。
----- -------- - - ------------------ --------------- ----------- -------------------------- ---------- ------------------------ --------- --------- -- --------------------- ------------ -- - -------------------- -- ------------ -- - ------------------- ---
Promise 与 async/await
Promise 和 async/await 是 JavaScript 处理异步操作的两种常见方式。使用 async/await 可以让异步代码更具可读性和可维护性,它使得代码看起来更像同步代码。
async 函数返回一个 Promise 对象,其中包含由函数解析的值,函数中可以使用 await 关键字来等待 Promise 对象的完成。
----- -------- ----------- - ----- -------- - ----- --------------- ----- ---- - ----- ---------------- ------ ----- -
结论
Promise 是一种非常强大的异步处理方式,使用它可以更加高效的处理异步操作并返回结果。ES9 中的 Promise 扩展使其更加灵活和易于处理更多的异步场景。初学者应该掌握 Promise 基本原理以及 ES9 中的 Promise 扩展,熟悉 Promise 与 async/await 的使用方式,以便更好地利用异步机制处理程序的复杂性。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/672c7747ddd3a70eb6d845d5