26 # eventloop 执行顺序

简介: 26 # eventloop 执行顺序

js 执行流程

例子1

// es6 内部是一个微任务
Promise.resolve().then(() => {
    console.log("Promise1");
    setTimeout(() => {
        console.log("setTimeout2");
    }, 0);
});
setTimeout(() => {
    console.log("setTimeout1");
    Promise.resolve().then(() => {
        console.log("Promise2");
    });
}, 0);

例子2

事件点击跟直接触发 addEventListener 是宏任务

button.addEventListener("click", () => {
    console.log("Listener1");
    Promise.resolve().then(() => {
        console.log("Promise1");
    });
});
button.addEventListener("click", () => {
    console.log("Listener2");
    Promise.resolve().then(() => {
        console.log("Promise2");
    });
});

直接点击按钮:会有两个宏任务进入队列,然后一次根据js执行流程去走,输出 Listener1 Promise1 Listener2 Promise2

如果直接执行 button.click(),相当通两个同时执行,会输出 Listener1 Listener2 Promise1 Promise2

例子3

async function async1() {
    console.log("async1 start");
    // 浏览器识别async+await,await 后面跟的是 promise 的话默认就会直接调用这个 promise 的 then 方法
    // async2 会立即执行,相当于async2().then(() => {console.log("async1 end")})
    await async2();
    console.log("async1 end");
}
async function async2() {
    console.log("async2");
}
console.log("script start");
setTimeout(() => {
    console.log("setTimeout");
}, 0);
async1();
new Promise((resolve, reject) => {
    console.log("promise1");
    resolve();
}).then(function () {
    console.log("promise2");
});
console.log("script end");
  • 默认执行: script start、async1 start、async2、promise1、script end
  • 微任务:[async1 end, promise2]
  • 宏任务:[setTimeout]

目录
相关文章
|
物联网 Java Linux
一文读懂物联网 MQTT 协议之实战篇
一文读懂物联网 MQTT 协议之实战篇
584 1
|
存储 运维 监控
物联网平台常见类别及对应平台(一)
物联网平台常见类别及对应平台(一)
1486 0
|
Web App开发 JSON 前端开发
Ajax实现动态及时刷新表格数据
Ajax实现动态及时刷新表格数据
|
Java 编译器
如何在Java中使用Lambda表达式实现函数式编程
Lambda表达式是Java 8中引入的一种新的语法,它可以使我们以更简洁的方式编写函数式代码。本文将介绍如何在Java中使用Lambda表达式实现函数式编程,并通过实例展示其优点。
88 3
|
并行计算 JavaScript 前端开发
【性能篇】30 # 怎么给WebGL绘制加速?
【性能篇】30 # 怎么给WebGL绘制加速?
359 0
【性能篇】30 # 怎么给WebGL绘制加速?
|
Web App开发 开发者
Google Chrome浏览器怎么开启查看帧率功能?
Google Chrome浏览器怎么开启查看帧率功能?
1460 0
Google Chrome浏览器怎么开启查看帧率功能?
Warning: [antd: Form.Item] `defaultValue` will not work on controlled Field. You should use `initialValues` of Form instead.
Warning: [antd: Form.Item] `defaultValue` will not work on controlled Field. You should use `initialValues` of Form instead.
1084 0
|
存储 缓存 JavaScript
【数据篇】31 # 如何对海量数据进行优化性能?
【数据篇】31 # 如何对海量数据进行优化性能?
287 0
【数据篇】31 # 如何对海量数据进行优化性能?
|
Web App开发
基于chrome的出墙插件
1,为啥要出墙 自从google离家出走了,百度就开始不思进取了,变得懒惰了。 百度这个搜索老给自己家的东西导入流量,英文搜索的东西也不多。 做技术的局限啊,但是goole就不太一样了,本身的英文支持就挺好的,而且是世界范围的。 开始自己使用hosts配置google,smarthos的。 后来这个不好使用了,开始研究goagent,发现也不好使用了,就开始使用百度一段时间。 2,最后找到了这
1348 0
|
Oracle 关系型数据库
oracle表列约束
1. 查看某张表列的约束及类型 SELECT USER_CONS_COLUMNS.CONSTRAINT_NAME AS 约束名, USER_CONS_COLUMNS.
703 0