Express.js 中利用 async/await 优化异步代码

Express.js 是一个开源的 Node.js web 应用框架,广泛应用于前后端分离的 web 项目中。在实现复杂功能时,异步编程是不可避免的,而使用 async/await 可以大大简化异步代码的编写。本文将介绍在 Express.js 中如何使用 async/await 进行异步编程,并提供相关示例。

什么是异步编程?

在传统的同步编程模式中,代码执行是线性的,按照从上至下的顺序执行,若某个函数需要等待 I/O 等耗时操作完成后才能继续执行下去,那么整个线程都会被阻塞,程序也就无法响应其他请求。

而在异步编程模式中,代码执行是非线性的,不会因为 I/O 操作或者其它异步操作的执行而阻塞整个线程。程序通过回调函数或者 Promise 对象等方式来通知事件完成,并在此时处理执行结果。

异步编程有利于多任务的处理,让程序的执行更加高效。

Express.js 中的异步编程

在 Express.js 中异步编程主要用于实现以下功能:

  • 处理请求和响应;
  • 连接数据库;
  • 请求 API 等;

在处理请求和响应时,使用异步编程可以避免线程阻塞,提高程序响应速度,也可将程序更好地控制和整合。在连接数据库时,异步编程能更好地优化数据库操作,提高数据读取和写入的效率。

与传统的异步编程方式相比,使用 async/await 可以进一步简化异步编程的写法,提高编码效率。

async/await 的使用

async 是一个关键字,用于修饰函数,表示该函数是一个异步函数。await 关键字用于等待一个异步操作的完成,只能在异步函数中使用。在异步函数中,await 等待的是一个 Promise 对象。如果这个对象变为 resolved,await 并不会整个阻塞程序的执行,而是只阻塞当前异步函数执行的代码,等待异步操作完成后再继续执行异步函数的剩余代码。

以下是一个使用 async/await 的示例:

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

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

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

以上示例中,logUserInfo 函数是一个异步函数,使用 async 声明。在异步函数中,使用 await 等待 User.findById 函数查询结果的返回,异步函数在查询结果返回前不会继续执行。

在路由中使用异步函数作为处理器,可以在回复请求之前使用 await 等待异步操作完成,避免长时间等待响应的情况。

异步编程的注意事项

  1. 一定要使用 try/catch 处理可能的异常。
  2. 慎用同步代码,避免线程阻塞。
  3. 恰当地使用 Promise,保证异步操作的准确性,尤其是解决 callback hell。

结论

使用 async / await 让异步编程变得简便得多,让我们的代码更加优雅。在应用中使用异步编程可以实现相应的功能,例如在数据库查询过程中优化数据访问速度等。

我们需要注意上述要点以及了解 Promise 的使用,并在实际应用中掌握在合适的场景使用异步编程的技巧,保证高效开发的过程中程序响应速度。

参考

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