Promise 如何和非 Promise 异步操作集成?

阅读时长 5 分钟读完

什么是 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

纠错
反馈

纠错反馈