如何在 ES6 中使用 async/await

阅读时长 6 分钟读完

在 JavaScript 中,异步操作非常常见,如网络请求、定时器、事件监听等等。传统的异步操作使用回调函数来处理,但这种方式容易引起“回调地狱”,阅读和维护困难。ES6 中引入了 async/await 特性,可以使异步操作的程序结构更清晰,阅读和维护更容易。

async/await 简介

async/await 是一种基于 Promise 的语法糖,能够帮助我们更方便地处理异步操作。其中,async 用于修饰函数,表示该函数返回的是一个 Promise 对象;await 用于修饰 Promise 对象,表示等待 Promise 对象的 resolve 结果。

以下是一个简单的例子:

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

------

输出结果为:

函数 foo 返回的是一个 Promise 对象。在函数内部,使用 await 等待 setTimeout 方法的 resolve 结果。在 resolve 后,才会执行下一行代码。这保证了程序的顺序性。

使用 async/await 处理异步操作

1. 处理 promise

在使用 async/await 前,需要掌握 Promise API。

以下是一个例子,使用 Promise 处理异步操作:

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

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

输出结果为:

使用 async/await 可以使代码更清晰简洁:

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

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

输出结果同上。

2. 处理多个 promise

当需要异步处理多个操作时,可以使用 Promise.all

以下是一个例子:

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

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

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

输出结果为:

3. 错误处理

使用 try/catch 可以捕获 Promise reject 的错误。

以下是一个例子:

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

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

输出结果为:

4. 并行执行

使用 await 可以使函数顺序执行,但在某些情况下,需要并行执行多个异步操作。可以使用 Promise.all 实现。

以下是一个例子:

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

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

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

输出结果为:

总结

async/await 是一种优雅的异步编程方式,在处理异步操作上非常方便。需要注意的是,async/await 本质上是基于 Promise 实现的,因此需要了解 Promise API。在实际开发中,建议在适当的场景下使用 async/await

参考资料

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

纠错
反馈