背景
在 JavaScript 中,异步编程是非常常见的技术。JavaScript 运行在单线程环境中,而异步操作又是非阻塞式的,因此异步编程可以帮助我们充分利用 CPU,提升代码性能。
以前,在处理异步操作时,JavaScript 的语言本身并不是非常便利。开发者经常需要使用回调函数来处理异步操作完成后的结果。而这些回调函数往往需要多层嵌套,形成回调地狱式的代码结构。
async/await 为何而生?
ES7 提出了一种新的异步编程方式:async/await。顾名思义,async 关键字用于定义异步函数,await 关键字用于等待异步操作完成。相比以往的异步编程方案,async/await 的代码结构更加清晰、易懂。
举一个例子,看看使用 async/await 和不使用 async/await 的异步代码区别:
使用 callback 方式实现单个异步操作:
--------------- ------ -- - ------------------ -------- -- - ------------------- ---------- -- - --------------- ------------ ------------------------------ --- --- ---
使用 Promise 方式实现单个异步操作:
--------------- ---------- -- ------------------- ------------ -- -------------------- -------------- -- --------------- ------------ -------------------------------
使用 async/await 方式实现单个异步操作:
----- ---- - ----- ---------------- ----- ------ - ----- ------------------- ----- -------- - ----- -------------------- --------------- ------------ ------------------------------
可以看到,使用 async/await 的代码结构更加清晰简洁。
Node.js 版本需求
然而,使用 async/await 编写的代码必须运行在支持该特性的 JavaScript 引擎中。目前,Node.js 7.6.0 以上版本已经支持 async/await 特性。
如果你的 Node.js 版本低于 7.6.0,你需要升级你的 Node.js 版本。你可以下载官方发布的最新版本,或者使用 nvm 进行版本切换。
async/await 使用指南
定义异步函数
使用 async 关键字可以定义异步函数。异步函数返回的结果是一个 Promise 对象。例如:
----- -------- --------------- - ----- ------ - ----- ------------------- - ------ ----- ---- - ----- -------------- ------ -------- -
上面的代码中,async 标志着该函数为异步函数,使用了 await 关键字等待 fetch 和 result.json 的异步操作结果。
等待异步操作结果
在异步函数中使用 await 关键字等待异步操作结果。await 后面跟一个 Promise 对象,如果该对象状态变为 resolved 或者 rejected,await 表达式就会返回异步操作的结果。例如:
----- ------ - ----- ------------------- - ------ ----- ---- - ----- --------------
上面的代码中,使用 await 等待 fetch 和 result.json 的异步操作结果,将数据存储到 user 变量中。
错误处理
在异步代码中,错误处理非常关键。Promise 提供了一个统一的错误处理机制,async/await 也是基于 Promise 实现的。
在异步函数中,使用 try/catch 来捕获异步操作可能抛出的错误。例如:
--- - ----- ------ - ----- ------------------- - ------ ----- ---- - ----- -------------- - ----- --- - -------------------------- --- -
总结
async/await 是一种非常优秀的 JavaScript 异步编程技术。使用 async/await 可以让你编写更加简洁、清晰的异步代码。不过,在使用 async/await 时,一定要注意 Node.js 版本的要求。
示例代码
下面提供一个示例代码,演示如何使用 async/await 来实现异步操作:
----- ----- - ---------------------- ----- -------- ------------- - ----- ------ - ----- ------------------- - ------ ----- ---- - ----- -------------- ------ ----- - ----- -------- ----------------- - ----- ------ - ----- -------------------- - -------- ----- ------ - ----- -------------- ------ ------- - ----- -------- ------------------- - --- ------------- - --- --- ---- ----- -- ------- - ------------- - ----------------------------------------- -- ------- - ----- ------ - ----- --------------------- - ------------------------- ----- -------- - ----- -------------- ------ --------- - ----- -------- ------ - --- - ----- ---- - ----- --------------- ----- ------ - ----- ------------------- ----- -------- - ----- -------------------- --------------- ------------ ------------------------------ - ----- --- - ---------------------------- --- - - -------
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64f69238f6b2d6eab3f2765e