async/await是由ES7提供的generator+promise的语法糖,模拟同步的效果,可以实现串行。
async是一个修饰符,控制函数返回promise实例
函数内部执行报错,则返回失败的实例,值是失败的原因
自己返回一个promise实例,以自己返回的为主
如果函数内部做了异常捕获,还是成功
async function p(){await 1 // 没有写return代表成功后返回undefined,等价于 return Promise.resolve(1).then(() => undefined)}async function fn(){return 1 // 等价于 return Promise.resolve(1)}// 异常捕获,还是返回成功async function func(){try{return a}catch(e){}return 10}
关于await执行
function api(interval) {return new Promise((resolve, reject) => {console.log('请求执行')setTimeout(() => {resolve(interval);}, interval);})}// await后面应该放置一个promise实例「我们书写的不是,浏览器也会把其变为promise实例」,await中断函数体中,其下面的代码执行「await表达式会暂停整个async函数的执行进程并出让其控制权」;只有等待await后面的promise实例是成功态之后,后面的代码才达到可执行条件,才会把之前暂停的代码继续执行,如果后面的promise实例是失败的,则下面的代码就不在执行了。// + await是异步的微任务// + 函数体中遇到await,后面代码该咋地咋地,但是下面的代码会暂停执行「把他们当做一个任务,放置在EventQueue的微任务队列中」async function fn(){let res1 = await api(1000)console.log(res1)let res2 = await api(2000)console.log(res2)}fn() // 请求执行 1000 请求执行 2000
