我已经使用Javascript有一段时间了,也了解Javascript事件循环的工作原理。然而,我遇到了一个不太能理解的情况。考虑以下代码:
setTimeout(()=> console.log('1'));
Promise.resolve('whatever').then(()=>console.log('2'));
console.log('3');
我期望得到以下输出结果:
然而,我在Chrome js控制台上运行它,却得到了以下结果:3
1
2
问题是: "Promise.resolve().then(fn)" 应该立即调用该函数或者将函数执行过程插入到事件循环结束的位置 - 就像 'setTimeout' 的工作方式一样 - 我是否遗漏了什么?3
2
1
Promise
执行前者,而setTimeout
执行后者。因此,通过递归调用then
可以阻塞事件循环,但不能通过递归调用setTimeout
来阻塞。 - user6445533