题目描述
Promise输出顺序问题
题目来源及自己的思路
问题1:为什么输出async2 之后输出promise1
问题2: 在输出script end执行后为什么输出了promise 1
问题三 为什么promise 1 后输出了 promise2
相关代码
粘贴代码文本(请勿用截图)
console.log('start')
const interval = setInterval(()=>{
console.log('setInterval')
},0)
var num = 0
clearInterval(interval)
Promise.resolve()
.then(()=>{
num = num+10086
console.log('promise 1')
})
.then(()=>{
console.log(num)
console.log('promise 2')
})
/*. */
console.log('=================')
async function async1 () {
console.log('async1 start');
let a = await async2();
await async3(a);
console.log('async1 end');
}
async function async2 () {
console.log('async2');
return Promise.resolve("hello async");
}
async function async3 (n) {
console.log(n)
console.log('async3');
}
console.log('script start');
setTimeout(function () {
console.log('setTimeout');
}, 0);
async1();
new Promise((resolve)=> {
console.log('promise1');
resolve();
}).then(function () {
console.log('promise2');
});
console.log('script end');
你期待的结果是什么?实际看到的错误信息又是什么?
没搞懂Promise输出循序? 请大佬讲解下 谢谢
建议先了解下 eventloop 再来看以下回答
大佬连接在这
https://segmentfault.com/a/11...
问题 1 async2 其实是同步执行的
等价于
所以 打印"async2"是同步的
问题 2
因为 script end 是同步任务
而第一个 promise1 是第一个 microtask
问题3
原理同问题 2