Promise的执行步骤

本文详细探讨了JavaScript中的事件循环机制,包括宏任务与微任务的执行顺序,以及同步和异步任务的处理流程。通过一个具体的代码示例,解释了setTimeout、Promise及其then方法如何在不同阶段执行,展示了JavaScript执行上下文的层次和回调函数的调度策略。理解这一机制对于优化代码执行效率至关重要。
摘要由CSDN通过智能技术生成
//难点:
// 事件循环
// 宏任务先执行 然后微任务再执行
// 先执行同步任务  然后执行宏任务 宏任务内部的同步任务 内部的微任务(开启下一轮的宏任务) 开启下一轮的宏任务
//一个宏任务执行完毕 检索下一轮宏任务
//脚本,计时器是宏任务
//then的执行体  then(()=>{})
//当异步(宏任务 微任务)执行完毕以后  就会回到回调函数 执行js线程的任务
//同步的代码先执行  异步的回调函数后执行  异步的回调函数想同时运行时 就看优先级
//先添加到队列的先运行 

列题:

 setTimeout(() => {
	console.log(0);
 });

new Promise(resolve => {
	console.log(1);
 	setTimeout(() => {
	resolve();
		Promise.resolve().then(() => console.log(2));
 		console.log(3);
 	});
 	Promise.resolve().then(() => console.log(4));
 }).then(() => {
 	console.log(5);
	Promise.resolve().then(() => console.log(8));
 	setTimeout(() => console.log(6));
});
 console.log(7);
//分析首先执行同步任务new Promise 和 找到内部的同步任务 console.log(1) 和 console.log(7)
//但执行同步任务的时候找到Promise.resolve().then(() => console.log(4));
和then(() => {
 console.log(5);
Promise.resolve().then(() => console.log(8));
 setTimeout(() => console.log(6));    两个微任务 第一阶段完成
然后同步任务做完,执行同步任务的微任务 	Promise.resolve().then(() => console.log(4));输出4
但是下一个微任务的resolve();在宏任务中,所以要等执行那个宏任务的时候才执行
开始执行宏任务,找到第一个宏任务
 setTimeout(() => {
	console.log(0);
 });
输出0 ,在找到下一个宏任务
setTimeout(() => {
	resolve();
		Promise.resolve().then(() => console.log(2));
 		console.log(3);
 	});
由于resolve();
然后输出同步任务console.log(3);输出三
然后执行reselove输出上轮的微任务输出5
然后执行两个微任务,由于js排队,所以谁先排队谁先输出 分别输出2 8
最后执行最后一个宏任务输出6
所以最后结果是1 7 4 0 3 5 2 8 6
//
//

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值