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]

目录
相关文章
|
22天前
|
安全 API
muduo源码剖析之EventLoop事件循环类
EventLoop.cc就相当于一个reactor,多线程之间的函数调用(用eventfd唤醒),epoll处理,超时队列处理,对channel的处理。运行loop的进程被称为IO线程,EventLoop提供了一些API确保相应函数在IO线程中调用,确保没有用互斥量保护的变量只能在IO线程中使用,也封装了超时队列的基本操作。
47 0
|
22天前
|
Web App开发 前端开发 JavaScript
什么是事件循环 Eventloop
什么是事件循环 Eventloop
52 0
|
8月前
|
JavaScript 前端开发 调度
25 # eventloop 执行流程
25 # eventloop 执行流程
30 0
|
9月前
线程执行顺序怎么控制?
线程执行顺序怎么控制?
32 0
|
10月前
|
Web App开发 消息中间件 JavaScript
事件循环(even loop)原理解析
1,要弄懂事件循环首先要了解线程和进程 通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源,在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位,由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度。 2, 浏览器是一个多进程多线程的应用程序,内部工作很复杂,它的进程主要包含 浏览器进程 网络进程 渲染进程 ① 浏览器进程: 负者BOM界面展示以
100 0
|
12月前
|
Java 数据处理 C++
c++11线程池的实现原理及回调函数的使用
c++11线程池的实现原理及回调函数的使用
|
消息中间件 JavaScript 前端开发
js的EventLoop事件循环机制调用栈、微任务、消息队列执行顺序优先级
js的EventLoop事件循环机制调用栈、微任务、消息队列执行顺序优先级
94 0
|
监控 JavaScript 前端开发
|
Java 调度
多线程执行顺序以及run方法的调用
多线程执行顺序以及run方法的调用
多线程执行顺序以及run方法的调用
|
编译器 Linux 调度
线程 - 线程优先级的高低和执行顺序的关系
线程 - 线程优先级的高低和执行顺序的关系
171 0