JavaScript Promise 教程

阅读时长 7 分钟读完

JavaScript Promise 是一种异步编程的解决方案,它可以更加优雅地处理异步操作。本文将详细介绍 Promise 的基本概念、用法和常见应用场景,帮助读者更好地理解和掌握 Promise。

Promise 的基本概念

Promise 是一个对象,它代表了一个异步操作的最终完成或失败,并且可以获取异步操作的结果。Promise 有三种状态:等待态(pending)、完成态(fulfilled)和拒绝态(rejected)。Promise 对象的状态只能从等待态转变为完成态或拒绝态,并且一旦状态发生变化,就不会再变化。

Promise 的基本语法如下:

-- -------------------- ---- -------
----- ------- - --- ----------------- ------- -- -
  -- ----
  -- -------- -
    ----------------
  - ---- -
    -------------
  -
---

--------------------- -- -
  -- -----------
---------------- -- -
  -- -------------
---
展开代码

在 Promise 的构造函数中,我们可以进行异步操作,并且根据操作结果调用 resolve 或 reject 来改变 Promise 的状态。然后我们可以通过 then 方法获取异步操作的结果,或者通过 catch 方法获取异步操作的错误信息。

Promise 的用法

Promise 的用法可以分为两种:链式调用和并行调用。

链式调用

链式调用是 Promise 最常见的用法,它可以让代码更加优雅和可读。在链式调用中,我们可以通过 then 方法来处理异步操作的结果,并将结果传递给下一个 then 方法。如果其中某个 then 方法返回了一个 Promise 对象,那么后面的 then 方法就会等待这个 Promise 对象的状态发生变化。

-- -------------------- ---- -------
----- ------- - -- -- -
  ------ --- ----------------- ------- -- -
    ------------- -- -
      --------- ----- ------ ---- -- ---
    -- ------
  ---
--

----- ----------- - -- -- -
  ------ --------------------- -- -
    ------ ----------
  ---
--

------------------------- -- -
  ------------------ -- ---
---
展开代码

在上面的代码中,getUser 返回一个 Promise 对象,表示异步获取用户信息。然后我们可以通过 then 方法获取用户信息,并将用户信息传递给下一个 then 方法。在 getUserName 的 then 方法中,我们只返回了用户的姓名,并且这个 then 方法返回了一个 Promise 对象。因此,在后面的 then 方法中,我们可以直接获取 getUserName 的返回值。

并行调用

并行调用是 Promise 的另一种用法,它可以同时执行多个异步操作,并等待所有异步操作完成后进行处理。在并行调用中,我们可以将多个 Promise 对象放入一个数组中,并使用 Promise.all 方法来等待所有 Promise 对象的状态发生变化。

-- -------------------- ---- -------
----- ------- - -- -- -
  ------ --- ----------------- ------- -- -
    ------------- -- -
      --------- ----- ------ ---- -- ---
    -- ------
  ---
--

----- ---------- - -- -- -
  ------ --- ----------------- ------- -- -
    ------------- -- -
      --------- ------ ----------- ------- ---- -------- ----- ---
    -- ------
  ---
--

----------------------- --------------------------- --------- -- -
  ------------------ -- - ----- ------ ---- -- -
  --------------------- -- - ------ ----------- ------- ---- -------- ----- -
---
展开代码

在上面的代码中,我们同时调用了 getUser 和 getArticle 两个异步操作,并使用 Promise.all 方法等待这两个异步操作都完成后进行处理。在 Promise.all 的 then 方法中,我们可以获取所有异步操作的结果,并进行处理。

Promise 的常见应用场景

Promise 在实际开发中有很多应用场景,下面列举了几个常见的应用场景。

异步加载图片

-- -------------------- ---- -------
----- --------- - ----- -- -
  ------ --- ----------------- ------- -- -
    ----- --- - --- --------
    ------- - ----
    ---------- - -- -- -
      -------------
    --
    ----------- - ------- -- -
      --------------
    --
  ---
--

----------------------------------------------------- -- -
  -------------------------------
---------------- -- -
  -------------------
---
展开代码

在上面的代码中,我们使用 Promise 实现了异步加载图片的功能。在 loadImage 函数中,我们创建了一个 Image 对象,并设置了它的 src 属性。然后我们通过 onload 和 onerror 事件来监听图片加载的状态,并根据状态调用 resolve 或 reject 来改变 Promise 的状态。在 loadImage 的 then 方法中,我们可以获取加载成功的图片,并将它添加到页面中。在 loadImage 的 catch 方法中,我们可以获取加载失败的错误信息,并进行处理。

异步请求数据

-- -------------------- ---- -------
----- --------- - ----- -- -
  ------ -------------------------- -- -
    -- ------------- -
      ------ ----------------
    - ---- -
      ----- --- --------------
    -
  ---
--

------------------------------------------------------ -- -
  ------------------
---------------- -- -
  -------------------
---
展开代码

在上面的代码中,我们使用 Promise 实现了异步请求数据的功能。在 fetchData 函数中,我们使用 fetch 函数发送请求,并根据响应的状态码来判断请求是否成功。如果请求成功,我们可以通过 response.json 方法获取响应的 JSON 数据,并将它传递给 then 方法。如果请求失败,我们可以通过 throw new Error 方法抛出一个错误,并将错误信息传递给 catch 方法。在 fetchData 的 then 方法中,我们可以获取请求成功的数据,并进行处理。在 fetchData 的 catch 方法中,我们可以获取请求失败的错误信息,并进行处理。

结语

本文介绍了 JavaScript Promise 的基本概念、用法和常见应用场景。Promise 是异步编程的重要解决方案,它可以更加优雅地处理异步操作。通过学习本文,读者可以更好地理解和掌握 Promise,并在实际开发中灵活运用。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67ccb26ae46428fe9e5f1ed0

纠错
反馈

纠错反馈