setTimeout(()=>{
console.log('set1')
})
new Promise((resolve,reject)=>{
console.log('p1')
resolve();
}).then(()=>{
console.log('then1')
})
console.log('1')
最后的执行结果顺序是:p1,set1,then1,set1
整个的一个执行顺序涉及到两点:
- js的执行顺序
- 微任务与宏任务
对于js的执行顺序而言,按照代码的顺序去找,
- 没有异步就 顺序执行
- 有异步放入异步队列之中
- new Promise的第一部分是按照同步执行的
以上三点可知:先打印p1之后是1;在之后由于set1和then1是放入异步队列之中的,那么当顺序执行完成之后再去执行这些。但是,任务又分为微热恩恩无和宏任务: - 每次支持性完成后要先检查当前是否微任务队列中还有微任务还没有执行完成,如果有的话就先执行完微任务再去执行下一个宏任务