ES6:Async / Await

2021-08-11  本文已影响0人  HIKALU

async 不一定是异步的

虽然 async 这个词本身表示异步(asynchronous的缩写),但 async 函数本身并不是异步的。是的,你没有看错,这个顶着异步名号的家伙,其实是个同步函数,真正的“异步”在它的肚子里。如果 async 函数的函数体里执行的全都是同步操作,那么它就和普通的函数没什么区别,只有当其中执行到异步的操作的时候,配合 await 才会发挥出真正的威力。

const asyncFunc = async () => {
  console.log('called')
  const result = await Promise.resolve('async')
  console.log(result)
}

asyncFunc()
  .then(res => console.log('then'))
  .catch(err => console.log(err))

console.log('sync')

async 函数的错误处理

async 函数的错误处理机制其实和 Promise 差不多,只不过一些细节上需要留意一下。

async 函数里如果出现有 Promise 被 reject 的情况,无论代码中是否有 return ,函数会立即返回一个被 reject 的 Promise,后续代码不会执行。如果希望异步操作出错不影响后续的逻辑,可以把异步操作嵌套在 try...catch 里,如果异步操作本身就是 Promise,也可以用 Promise 的 catch() 来处理。

上一篇 下一篇

猜你喜欢

热点阅读