async...await 的一些使用總結

async...await 的一些使用總結

關於 async

它會隱式返回一個 Promise 對象

async func () {
  return 'a'
}

// 等價於
func () {
  return new Promise((resolve, reject) => {
    resolve ('a')
  })
}
async func () {
  return new Promise(resolve, reject) => {
    resolve ('a')
  })
}

// 等價於
func () {
  let promise = return new Promise((resolve, reject) => {
    resolve('a')
  })
  return new Promise((resolve) => resolve(promise))
}

async func 中有 return 'a', 等價於 func 中 new Promise 的 resolve('a')
async func 中有 throw Error('a'), 等價於 func 中 new Promise 的 reject('a')

關於 await

await 後面跟的是 Promise 對象,如果不是,也會轉換成 Promise 對象。
如 const res = await 'hello', 等價於 const res = await Promise.resolve('hello')
try … catch() 中的 catch() 會捕獲到 Promise 的異常,下面的代碼是我經常使用的

async function func() {
  try {
    const res = await Promise.reject(30);
  } catch (err) {
    console.log(err); // 30
  }
}

func();
依次順序執行異步操作
// 先執行 task1,等 res1 有結果後,再執行 task2
async func () {
  const res1 = await task1()
  const res2 = await task2()
}
並行執行異步操作
func () {
  task1()
  task2()
  task3()
}

或者,

async func () {
  const promise1 = task1()
  const promise2 = task2()
  const res1 = await promise1
  const res2 = await promise2
}

或者,

async function func () { 
  await Promise.all([task1(), task2(),task3()])
  console.log('三個任務執行完畢')
  // 全部執行完畢後,接着後面的代碼
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章