什么是 Promise?
Promise 是 JavaScript 中处理异步操作的一种理想方式。Promise 对象代表一个异步操作的最终完成(或失败)及其结果值的表示。
Promise 的特征
- 具有状态, Pending(进行中)、Fulfilled(已成功)和Rejected(已失败) 。
- 可以通过 then 方法附加回调函数,promise 状态改变时会触发回调函数。
- Promise 对象的 then 方法会返回一个新的 Promise 对象,可以通过串连多个 then 方法形成同步的异步操作。
如何与非 Promise 异步操作集成
有时候在我们的应用中还有一些不是 Promise 的异步操作,这时候我们如何用 Promise 来统一处理呢?
Promise 提供了两个非常重要的方法:Promise.resolve 和 Promise.reject。
Promise.resolve 方法返回一个已经成功的 Promise 对象,Promise.reject 方法返回一个已经拒绝的 Promise 对象。
-- -------------------- ---- ------- -- ------------- ------- -- -------- ------------------ - ------ --- ----------------- ------- -- - ------------- -- - ------------- --------- -- ------ --- - -- -- --------------- ---------- ------- --- ------- - ------------------------------------ ----------------- -- - ------------------ ---------- -- - --------------- ---展开代码
上面的代码中,doSomethingAsync 函数是一个普通的异步操作方法,我们通过 Promise.resolve 包裹它,返回一个新的 Promise 对象,这样就能够在 then 和 catch 方法中处理异步操作返回的值或者异常。
-- -------------------- ---- ------- -- ----------- ------- ----- -------- -------------- --------- - ------------- -- - -------------- -------- -- ------ - -------- ------------------- - ------ --- ----------------- ------- -- - -------------- ------ -- - -------- - -------------- - ---- - -------------- -- ----- ------- - --- --- - -- -- -------------- ---- ------- -------- ------- --- ------- - ------------------------------------------------------------------- ----------------- -- - ------------------ ---------- -- - --------------- ---展开代码
在上面的示例中,fetchData 是一个普通的异步操作方法,我们通过 fetchDataAsync 将其转化为一个 Promise 对象。Promise.reject 方法用来将 fetchDataAsync 转化为一个拒绝状态的 Promise 对象,这样我们就可以在 then 和 catch 中统一处理异步操作的结果了。
更好、更简洁的异步操作方式——async/await
除了 Promise 的 then 和 catch 方法,ES6 还提供了 async/await 来更加优雅的处理异步操作。
async/await 是一种 Promise 的语法糖,它使得异步的代码看起来更加简洁、易懂,并且更加易于调试。
-- -------------------- ---- ------- -- ----------- ----------- ----- ----- -------- ------------------- - ------ --- ----------------- ------- -- - -------------- ------ -- - -------- - -------------- - ---- - -------------- -- ----- ------- - --- --- - ----- -------- --------- - --- - --- ---- - ----- --------------------------------------------------- ------------------ - -------- - --------------- - - ----------展开代码
上面的代码通过 async 和 await 关键字,把异步代码同步化的编写方式,这样我们就能够更好的处理异步操作的代码,并且代码看起来也更加简洁。
总结
在本文中,我们介绍了 Promise 的基础知识,以及如何将非 Promise 的异步操作转化为 Promise 对象来统一处理异步操作。同时,我们还了解了如何更加优雅的使用 async/await 关键字来处理异步操作。希望通过本文的学习,大家对于 Promise 的使用和异步操作有了更深入的了解。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646845fc968c7c53b0879aee