有了async为什么还要promise
Posted 火腿肠烧烤大赛冠军
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有了async为什么还要promise相关的知识,希望对你有一定的参考价值。
今天突然想到了一个面试问题,有了async为什么还要promise处理异步请求,当时想的答案是,promise是将任务异步处理,而async和await是将异步任务趋于同步任务,但是并不知道其原理,考虑了一下,大概有如下想法。
原代码
// wait() 是一个返回 promise 的函数
async function test1 ()
console.log(111)
await wait(500)
console.log(222)
await wait(1000)
console.log(333)
转化为
function test1 ()
this.prev = 0
return new Promise(resolve =>
function loop(value, _next)
return Promise.resolve(value).then(_next)
function fn1 ()
switch (this.prev)
case 0:
console.log(111);
this.prev = 3;
return loop(wait(500), fn1);
case 3:
console.log(222);
this.prev = 6;
return loop(wait(1000), fn1);
case 6:
console.log(333);
return resolve()
fn1(resolve)
)
这是因为promise可以将await外的任务变成微任务 也就是放入异步队列中等待 而await后的内容则是放在promise为同步任务,所以同步任务执行后才会执行异步任务
这样就解释了为什么await可以强制等待代码执行结束后再执行
还有一些疏漏 等想通后再补充
以上是关于有了async为什么还要promise的主要内容,如果未能解决你的问题,请参考以下文章