js 事件循环 宏任务 微任务

			console.log('1');
			setTimeout(function() {
			    console.log('2');
			    new Promise(function(resolve) {
			        console.log('4');
			        resolve();
			    }).then(function() {
			        console.log('5')
			    })
			})
			new Promise(function(resolve) {
			    console.log('7');
			    resolve();
			}).then(function() {
			    console.log('8')
			})
			setTimeout(function() {
			    console.log('9');
			    new Promise(function(resolve) {
			        console.log('11');
			        resolve();
			    }).then(function() {
			        console.log('12')
			    })
			})

先分析代码的运行步骤:
1 代码从上向下执行
console.log(‘1’); 打印出 1
console.log(‘7’); 打印出 7
2 遇到 宏任务 setTimeout 放到异步队列中
遇见 微任务 Promise 放到 异步队列中
3 主进程 代码执行完毕 要去异步队列中 找寻是否有要执行的 任务
发现异步队列中有要执行的任务 就要进行 处理
4 首先 在异步队列中 有 宏任务 和 微任务
先执行 微任务 然后在执行 宏任务

宏任务
第一个 宏任务
setTimeout(function() {
console.log(‘2’);
new Promise(function(resolve) {
console.log(‘4’);
resolve();
}).then(function() {
console.log(‘5’)
})
})
第二个 宏任务
setTimeout(function() {
console.log(‘9’);
new Promise(function(resolve) {
console.log(‘11’);
resolve();
}).then(function() {
console.log(‘12’)
})
})
微任务
new Promise(function(resolve) {
console.log(‘7’);
resolve();
}).then(function() {
console.log(‘8’)
})
5 主进程 中 已经 打印了 1 7
依次 执行 微任务 8
在执行 宏任务
先执行第一个 宏任务 打印 2 4
原因:代码自上往下执行 先执行 同步代码 在执行异步代码 再打印 5
下一个 宏任务 同理 打印 9 11
微任务 12

整段代码输出为 :1,7,8,2,4,5,9,11,12 ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值