1.Promise有个微任务队列(then),轮询到执行的时候,就会从队列中调出任务,放入主线程中去执行
2.任务中的微队列可以有多个
3.等级排序:主线程>微任务>宏任务(其最后执行setTimeout)
4.主线程中的任务执行完成后,再去扫描微任务队列中有没有任务(由resolve,reject把任务放进微任务队列中去),有则执行,没有再去执行宏任务
格式:
new promise(主任务).then(result,err).then(result,err).then(...) //其实每一个Promise.then也是一个Promise...
见代码:
1 setTimeout(() => { 2 console.log('我是宏任务'); 3 }, 0); //先来个宏任务 4 5 new Promise((resolve, reject) => { 6 reject('第一次执行失败'); 7 console.log('主线程1'); 8 }) 9 .then(result => { 10 console.log(result); 11 }, err => { 12 console.log(err); 13 }) 14 .then( //对上一次then执行结果的处理 15 result => { 16 console.log('后续处理成功啦') 17 }, 18 err => { 19 console.log('后续处理还是失败'); 20 } 21 ) 22 console.log('主线程2');
//执行结果:
主线程1
主线程2
第一次执行失败
后续处理成功啦
我是宏任务
再之需要注意的便是Promise的主任务中的状态是单一不可变的,即如果有多个状态时,位置最靠前的起决定作用,后续的reject,resolve将不会再起作用