理解 Javascript async 和 await(解读 ECMAScript 2018)

阅读时长 4 分钟读完

理解 Javascript async 和 await(解读 ECMAScript 2018)

Javascript 是一种单线程执行的编程语言,因此处理一些异步操作时需要使用回调函数或者 Promise 对象。但是在 ECMAScript2017中,新增加了 async 和 await 这两个关键词,使得程序员在编写异步操作时更加方便和简洁。

async 与 await 基本使用

async 用于定义一个异步函数,在函数内部使用 await 关键字来阻塞等待异步任务完成。

下面是一个简单的示例:

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

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

在上面的例子中,getName 函数用 async 定义,内部使用 await 等待 fetch 异步请求完成并返回响应,然后等待将响应解析为 JSON。最后返回响应数据的名字。在函数返回值后,使用 promise.then() 来捕获 name 并打印到控制台。

async 函数返回一个 promise 对象,当函数有显式 return 语句时,promise 对象的值就是 return 语句返回的值;当没有 return 语句时,promise 对象的值就是 undefined。

await 关键字只能在异步函数内部使用,并且必须在 async 函数中使用。

async 函数还可以与箭头函数结合使用:

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

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

async 函数的错误处理

上述示例函数无法捕捉失败请求(例如服务器无法到达时)的错误。 为了捕获异常情况,可以使用 try-catch 块:

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

在上面的代码中,当 fetch 异步请求失败时,会触发 catch 块内的错误处理程序。此时 console.log 将会输出"请求失败",以及错误对象。

async 函数的并行操作

async 函数可以同时进行多个异步操作,等待最慢的异步操作执行完成后,函数才会返回。

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

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

在上面的示例中,getUserInfo 函数等待两个异步操作 fetch 执行完成。它们都成功返回响应,函数返回包含用户简介和帖子的对象。

总结

async 和 await 是 ECMAScript 2018 中的新功能。它使异步操作的编写变得更加方便和简洁,并且可以用于并行操作,并且通过使用 try-catch 块来处理错误。

在我们的示例代码中,我们尝试发起异步请求,并将返回的响应数据显示在控制台上。我们还演示了如何将 async 函数与箭头函数或者返回解析为 promise 的函数组合使用。

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

纠错
反馈