關於 async
它會隱式返回一個 Promise 對象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
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() }
或者,code
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('三個任務執行完畢') // 所有執行完畢後,接着後面的代碼 }