Express.js 中使用 Promise 进行异步编程

在开发 Web 应用程序时,异步编程是不可避免的。在 Node.js 中,异步编程是通过回调函数来实现的。然而,回调函数嵌套过多会导致代码难以维护和理解。为了解决这个问题,Promise 出现了。Promise 是一种处理异步操作的方法,它可以让我们更容易地编写和组织异步代码。

在 Express.js 中,我们经常需要处理异步操作,例如从数据库中检索数据或从外部 API 获取数据。使用 Promise 可以使异步操作更容易管理,并使代码更易于理解。

Promise 的基本概念

Promise 是一种表示异步操作的对象,它可以有三种状态:pending(进行中)、fulfilled(已成功)和 rejected(已失败)。当 Promise 对象处于 pending 状态时,它还没有完成。当 Promise 对象处于 fulfilled 状态时,它已经成功完成。当 Promise 对象处于 rejected 状态时,它已经失败。

Promise 对象有两个重要的方法:then() 和 catch()。then() 方法用于处理 Promise 对象的成功状态,catch() 方法用于处理 Promise 对象的失败状态。

下面是一个简单的 Promise 示例:

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

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

在上面的代码中,我们创建了一个 Promise 对象。如果 Math.random() 的值小于 0.5,Promise 对象将处于 fulfilled 状态,并将字符串 "Success!" 传递给 then() 方法。如果 Math.random() 的值大于或等于 0.5,Promise 对象将处于 rejected 状态,并将字符串 "Failed!" 传递给 catch() 方法。

在 Express.js 中使用 Promise

在 Express.js 中,我们可以使用 Promise 来处理异步操作。下面是一个使用 Promise 的示例,该示例从数据库中获取数据:

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

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

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

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

在上面的代码中,我们使用 MySQL 模块创建了一个数据库连接。然后,我们定义了一个路由处理程序,该处理程序从数据库中检索数据并将其发送回客户端。我们使用 db.query() 方法执行 SQL 查询。该方法接受一个回调函数,该回调函数在查询完成后被调用。如果查询成功,我们使用 res.send() 方法将结果发送回客户端。如果查询失败,我们使用 res.status() 方法发送 500 状态码。

使用 Promise,我们可以重写上面的代码,使它更易于管理和理解:

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

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

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

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

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

在上面的代码中,我们定义了一个名为 queryDatabase() 的函数,该函数返回一个 Promise 对象。该函数接受一个 SQL 查询字符串作为参数,并使用 db.query() 方法执行查询。如果查询成功,我们使用 resolve() 方法将结果传递给 then() 方法。如果查询失败,我们使用 reject() 方法将错误传递给 catch() 方法。

在路由处理程序中,我们使用 queryDatabase() 函数来执行查询。我们使用 then() 方法处理成功的 Promise 对象,并使用 catch() 方法处理失败的 Promise 对象。

结论

使用 Promise 可以使异步编程更易于管理和理解。在 Express.js 中,我们可以使用 Promise 来处理异步操作,例如从数据库中检索数据或从外部 API 获取数据。如果您正在开发一个需要处理异步操作的 Web 应用程序,那么使用 Promise 可能是您的最佳选择。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/673afcc239d6d08e88b0f501