宏任务与微任务

  之前我们讨论过JS代码执行的同步和异步,JS的单线程执行机制不会改变;但是仅仅懂得同步异步是远远不够的;比如说下面这些代码:

 1 setTimeout(function(){
 2         console.log("1");
 3     });
 4     new Promise(function(resolve,reject){
 5         console.log("2");
 6         resolve();
 7     }).then(function(){
 8         console.log("3");
 9     })
10     console.log("4");

  由于同步和异步的影响,我们会自信的说出打印结果是: 2,3,4,1;可是呢,用Chrome打开运行代码,蒙了,打印的竟然是:2 ,4 ,3,1;

  这就不得不引出我们即将讨论的主角:宏任务和微任务;简单来说:JS中,大部分代码被分配到宏任务排队执行,但像Promise.then、process.nextTick()等微任务;我们就拿Promise.then来举例说明。根据先执行微任务再执行宏任务的机制;还是上面那段代码,我们简单的分析一下:

setTimeout(function(){
        console.log("1");   
    });
    new Promise(function(resolve,reject){
        console.log("2");
        resolve();
    }).then(function(){
        console.log("3");
    })
    console.log("4");

 这些代码整体作为一个宏任务开始执行,还是按照先同步,后异步的规则,遇到延时定时器,是个异步代码,先挂起来不执行;接着遇到Promise的实例化对象,属于同步任务,立即执行,打印一个2;接下来遇到实例化对象的微任务,但后面还有一个同步代码,依然是先执行同步代码,打印4;接下来一轮跑完了,我们回头看,有一个延时定时器,还有一个微任务,先执行微任务,打印出3,最后打印1;就像跑了第二遍一样,这就是一个最简单的时间循环(event Loop);

  接下来写一段稍微复杂的,读者们可以一起思考一下:

console.log('1');

    setTimeout(function () {
        console.log('2');
        new Promise(function (resolve) {
            console.log('3');
            resolve();
        }).then(function () {
            console.log('4')
        })
    })

    new Promise(function (resolve) {
        console.log('5');
        resolve();
    }).then(function () {
        console.log('6')
    })

    setTimeout(function () {
        console.log('7');
   
        new Promise(function (resolve) {
            console.log('8');
            resolve();
        }).then(function () {
            console.log('9')
        })
    })

    console.log('10');

  整段代码作为一个宏任务,先执行同步代码,所以第一次时间循环后会打印出:1,5,10;接下来发现有微任务:打印一个6;开始第二轮循环,2个异步代码并且都是立即执行的延时定时器,我们就按照从上到下的顺序执行,先看第一个定时器(此时这就是一个宏任务):会打印出2,3;然后执行微任务,打印4;最后看第二个定时器:一次打印:7,8,9;over;

  再此感谢掘金的ssssyoki大神的讲解,再加上自己的一些理解;希望这篇文章可以对你带来些许帮助;

转载于:https://www.cnblogs.com/XieYFwin/p/10871123.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
代码下载:完整代码,可直接运行 ;运行版本:2022a或2019b或2014a;若运行有问题,可私信博主; **仿真咨询 1 各类智能优化算法改进及应用** 生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化 **2 机器学习和深度学习方面** 卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断 **3 图像处理方面** 图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知 **4 路径规划方面** 旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化 **5 无人机应用方面** 无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配 **6 无线传感器定位及布局方面** 传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化 **7 信号处理方面** 信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化 **8 电力系统方面** 微电网优化、无功优化、配电网重构、储能配置 **9 元胞自动机方面** 交通流 人群疏散 病毒扩散 晶体生长 **10 雷达方面** 卡尔曼滤波跟踪、航迹关联、航迹融合

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值