setTimeout(function(){
console.log('set1')
})
var p = new Promise(function(resolve,reject){
resolve()
})
setTimeout(function(){
console.log('set2');
new Promise(function(resolve,reject){
resolve()
}).then(function(){
console.log('promise1')
})
})
setTimeout(function(){
console.log('set3')
})
p.then(function(){
console.log('promise')
})
console.log('1234')
如代码所示 最后运行结果为
1234 promise set1 set2 promise1 set3
原因如下:
1,promise是微任务,setTime是宏任务
2,js执行会先执行微任务,微任务队列空了, 再去看宏任务
所以:同步执行完,先去执行微,所以先promise,微任务队列空了,去执行宏,所以接着set1,set2,set2里又加入一个微任务,微任务队列有了,就先做微任务,所以在是promise1,最后在set3