关于 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('三个任务执行完毕') // 所有执行完毕后,接着后面的代码 }