js,timeout,promise执行顺序

js,timeout,promise执行顺序

大家好,又见面了,我是全栈君。

总结

  1. macro-task包括:script(整体代码), setTimeout, setInterval, setImmediate, I/O, UI rendering。

  2. micro-task包括:process.nextTick, Promises, Object.observe, MutationObserver

总的来说就是:

  1. 不同的任务会放进不同的任务队列之中。

  2. 先执行macro-task,等到函数调用栈清空之后再执行所有在队列之中的micro-task。

  3. 等到所有micro-task执行完之后再从macro-task中的一个任务队列开始执行,就这样一直循环。

  4. 当有多个macro-task(micro-task)队列时,事件循环的顺序是按上文macro-task(micro-task)的分类中书写的顺序执行的。

先执行正常栈中的代码,在执行micro-task,然后是macro-task.

也就是set开头的最后执行,promise在set之前,promise方法里的第一个执行方法不入栈,在正常栈里执行

console.log('golb1');
setImmediate(function() {
    console.log('immediate1');
    process.nextTick(function() {
        console.log('immediate1_nextTick');
    })
    new Promise(function(resolve) {
        console.log('immediate1_promise');
        resolve();
    }).then(function() {
        console.log('immediate1_then')
    })
})
setTimeout(function() {
    console.log('timeout1');
    process.nextTick(function() {
        console.log('timeout1_nextTick');
    })
    new Promise(function(resolve) {
        console.log('timeout1_promise');
        resolve();
    }).then(function() {
        console.log('timeout1_then')
    })
    setTimeout(function() {
        console.log('timeout1_timeout1');
    process.nextTick(function() {
        console.log('timeout1_timeout1_nextTick');
    })
    setImmediate(function() {
        console.log('timeout1_setImmediate1');
    })
    });
})
new Promise(function(resolve) {
    console.log('glob1_promise');
    resolve();
}).then(function() {
    console.log('glob1_then')
})
process.nextTick(function() {
    console.log('glob1_nextTick');
})

上面的代码要在node环境里执行,

结果如下:

golb1
glob1_promise
glob1_nextTick
glob1_then
timeout1
timeout1_promise
timeout1_nextTick
timeout1_then
immediate1
immediate1_promise
immediate1_nextTick
immediate1_then
timeout1_timeout1
timeout1_timeout1_nextTick
timeout1_setImmediate1

 

转载于:https://www.cnblogs.com/windseek/p/8569522.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107650.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux中查看网卡型号的命令[通俗易懂]

    linux中查看网卡型号的命令[通俗易懂]linux中查看网卡型号的命令

    2022年10月18日
    2
  • 分布式事务处理技术之LCN

    分布式事务处理技术之LCN分布式事务 LCN 第一章分布式事务介绍一 什么是分布式事务二 XA 的两阶段提交方案三 TCC 解决方案四 分布式事务中间件解决方案第二章 LCN 分布式事务处理框架介绍一 什么是 LCN 框架二 LCN 框架原理及执行步骤三 什么是 LCN 的事务协调机制四 LCN 的事务补偿机制第三章 LCN 分布式事务框架应用一 LCN 分布式事务框架应用环境搭建创建入口项目 springcloud porta

    2025年9月25日
    0
  • python判断是否为数字类型_python判断字符串是否为数字

    python判断是否为数字类型_python判断字符串是否为数字以下实例通过创建自定义函数is_number()方法来判断字符串是否为数字:#-*-coding:UTF-8-*-#Filename:test.py#authorby:www.runoob.comdefis_number(s):try:float(s)returnTrueexceptValueError:passtry:importunicodedataunico…

    2025年7月31日
    3
  • 网络舆情分析与研判的指标还应有哪些_舆情监测是什么

    网络舆情分析与研判的指标还应有哪些_舆情监测是什么网络聚集的人气、展开的场景与揭示的真相,不仅会推动新闻事件的发展、形成网络舆论,甚至还会直接影响社会主流舆论、推动社会变革。对舆情监测主体来说,如何加强对网络舆情的实时全面监测,并对其做出及时反馈、防患于未然;如何利用现代信息技术做好网络舆情分析,从而进行有效引导和控制;如何化解网络舆情危机,实现网络舆情的高效管理是一项任重而道远的任务。在网络舆情分析和管理中,舆情监测主体的业务需求是基础和根本,业务需求的满足与否,是评判网络舆情分析系统的核心指标。网络舆情分析系统的评判指标参考项,如下:网络舆情分析

    2022年9月16日
    2
  • php输出一张本地图片_java html转图片

    php输出一张本地图片_java html转图片$img1=’data:p_w_picpath/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlsAAAD4CAIAAABUsLRPAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR42uxdB3hUZdYeQBARXXVVEHDF1bXsumvHLnZFBVHsK6io9GZBaaH3GtJ7T0iZ9N577wQSIC…

    2022年9月15日
    1
  • cpu不能直接读取和执行_pc机有几个微处理器

    cpu不能直接读取和执行_pc机有几个微处理器笔记本电脑最重要的硬件是CPU(中央处理器)。它的质量直接关系到计算机的性能。CPU不好,其他硬件也很好,计算机性能也不好。因此,购买笔记本电脑时,务必要考虑CPU性能。以下编辑器分享了笔记本计算机的CPU性能排名,让我们看一下。笔记本CPU性能排名清单排名模型CPU标记值[第一名]IntelXeonE5-2687W@3.10GHz[评分:14564][第二名]IntelXeon…

    2022年9月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号