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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Haier数字可视对讲系列(转)「建议收藏」

    Haier数字可视对讲系列(转)「建议收藏」数字可视对讲系列楼宇可视对讲这一家庭安防设备是智能化小区建设的必要项目之一,也是家居安全的护身符。对讲系统是在各小区、单元门入口安装防盗门和对讲装置,其主要目的是实现访客与住户可视、对讲。住户可通过系统遥控开启防盗门,从而有效…

    2022年6月22日
    54
  • 包管理器Bower使用手冊之中的一个

    包管理器Bower使用手冊之中的一个

    2021年11月14日
    100
  • java中数组转成list_java数组转json

    java中数组转成list_java数组转jsonJava数组转List的几种方法一、Arrays.asList二、Collections.addAll三、Arrays.stream(arr).collect(Collectors.toList())本文提供了几种Java中常用的数组转List的方法一、Arrays.asList//Array转ListString[]arr={“a”,”b”,”c”};List<String>list=Arrays.asList(arr);System.out.println

    2022年8月23日
    8
  • .NETMVC 使用过滤器完成未登录拦截[通俗易懂]

    .NETMVC 使用过滤器完成未登录拦截[通俗易懂].NETMVC使用过滤器完成未登录拦截。

    2022年7月12日
    19
  • 欧拉函数及其计算_计算n的欧拉函数

    欧拉函数及其计算_计算n的欧拉函数欧拉函数1.定义什么是欧拉函数?任意给定正整数n,请问在小于等于n的正整数之中,有多少个与n构成互质关系?(比如,在1到8之中,有多少个数与8构成互质关系?)计算这个值的方法就叫做欧拉函数,用φ(n)表示。在1到8之中,与8形成互质关系的是1、3、5、7,所以φ(n)=4。2.计算欧拉函数计算公式这个p是什么呢?一个正整数n可以通过分解质因数得到例如n=…

    2022年8月22日
    8
  • linux常用命令大全新手入门(零基础自学葫芦丝快速入门篇)

    一、学习前准备帮助文档Linux命令大全(★★★),可以在上面找到你要查找的linux命令Linux命令大全|菜鸟教程Linux教程|菜鸟教程Tab补全Tab补全是非常有用的一个功能,可以用来自动补全命令或文件名,省时准确。未输入状态下连按两次Tab列出所有可用命令已输入部分命令名或文件名,按Tab进行自动补全,多用你就肯定会喜欢的了。…

    2022年4月18日
    62

发表回复

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

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