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]

目录
相关文章
|
3月前
|
安全 API
muduo源码剖析之EventLoop事件循环类
EventLoop.cc就相当于一个reactor,多线程之间的函数调用(用eventfd唤醒),epoll处理,超时队列处理,对channel的处理。运行loop的进程被称为IO线程,EventLoop提供了一些API确保相应函数在IO线程中调用,确保没有用互斥量保护的变量只能在IO线程中使用,也封装了超时队列的基本操作。
38 0
|
3月前
|
Web App开发 前端开发 JavaScript
什么是事件循环 Eventloop
什么是事件循环 Eventloop
48 0
|
6月前
|
JavaScript 前端开发 调度
25 # eventloop 执行流程
25 # eventloop 执行流程
26 0
|
6月前
|
Java
异步编程 - 02 显式使用线程和线程池实现异步编程
异步编程 - 02 显式使用线程和线程池实现异步编程
40 0
|
7月前
goroutine+channel实现对多个goroutine的顺序执行
goroutine+channel实现对多个goroutine的顺序执行
|
10月前
|
Java 数据处理 C++
c++11线程池的实现原理及回调函数的使用
c++11线程池的实现原理及回调函数的使用
|
消息中间件 JavaScript 前端开发
js的EventLoop事件循环机制调用栈、微任务、消息队列执行顺序优先级
js的EventLoop事件循环机制调用栈、微任务、消息队列执行顺序优先级
91 0
|
监控 JavaScript 前端开发
|
Java
如何让线程池里面的线程按照顺序执行?
笔者今天看到一个有趣的面试题,如何让多个线程按照既定的顺序依次执行?比如每个线程输出一个整数,
520 0
|
编译器 Linux 调度
线程 - 线程优先级的高低和执行顺序的关系
线程 - 线程优先级的高低和执行顺序的关系
166 0