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 协议之实战篇
709 1
|
存储 运维 监控
物联网平台常见类别及对应平台(一)
物联网平台常见类别及对应平台(一)
1883 21
|
Web App开发 JSON 前端开发
Ajax实现动态及时刷新表格数据
Ajax实现动态及时刷新表格数据
|
Java 编译器
如何在Java中使用Lambda表达式实现函数式编程
Lambda表达式是Java 8中引入的一种新的语法,它可以使我们以更简洁的方式编写函数式代码。本文将介绍如何在Java中使用Lambda表达式实现函数式编程,并通过实例展示其优点。
114 3
|
Oracle 关系型数据库
oracle表列约束
1. 查看某张表列的约束及类型 SELECT USER_CONS_COLUMNS.CONSTRAINT_NAME AS 约束名, USER_CONS_COLUMNS.
712 0
|
2天前
|
云安全 人工智能 算法
以“AI对抗AI”,阿里云验证码进入2.0时代
三层立体防护,用大模型打赢人机攻防战
1294 3
|
2天前
|
机器学习/深度学习 安全 API
MAI-UI 开源:通用 GUI 智能体基座登顶 SOTA!
MAI-UI是通义实验室推出的全尺寸GUI智能体基座模型,原生集成用户交互、MCP工具调用与端云协同能力。支持跨App操作、模糊语义理解与主动提问澄清,通过大规模在线强化学习实现复杂任务自动化,在出行、办公等高频场景中表现卓越,已登顶ScreenSpot-Pro、MobileWorld等多项SOTA评测。
578 3
|
3天前
|
人工智能 Rust 运维
这个神器让你白嫖ClaudeOpus 4.5,Gemini 3!还能接Claude Code等任意平台
加我进AI讨论学习群,公众号右下角“联系方式”文末有老金的 开源知识库地址·全免费