幽蝶幻影

文章 评论 浏览 29

幽蝶幻影 2022-05-04 13:57:48

因为async await 本身就是promise+generator的语法糖。所以await 后面的语法,我觉得肯定是作为micro task,不可能是macro task。
我个人理解是这样:

async function async1() {
	console.log('async1 start');
	await async2();
	console.log('async1 end');
}
等价于
async function async1() {
	console.log('async1 start');
	Promise.resolve(async2()).then(() => {
                console.log('async1 end');
        })
}

我在node和最新版本的chrome里执行的话,输出结果是

script start
async1 start
async2
promise1
script end
async1 end
promise2
setTimeout

因为async1函数先执行,所以async2先加入micro task,因此async1 end先展示。这个看起来就比较合理点。目前看,不同浏览器实现不一样,没有统一的标准,不过最新的Node和chrome看样子已经修复过来了。

我也是由果推因,可能我的环境不是最新的原因...

所以其实这道题没什么意义,我觉得比较正常应该是async1 end 输出在promise2 之前。我刚才用babel转译了下后,输出顺序也是这样。

第 10 题:常见异步笔试题,请写出代码的运行结果

更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文