当前位置:网站首页>浏览器node事件循环
浏览器node事件循环
2022-07-02 09:43:00 【大海里没有水】
javascript浏览器中的JavaScript线程

1、浏览器的事件循环

2、宏任务和微任务
1、定时器、ajax、DOM等的回调会加入宏任务
2、queueMicrotask、Promise then等加入到微任务里面
注:在执行任何的宏任务之前,都需要保证微任务队列已经被清空了。

3、Promise面试题
3.1
setTimeout(function () {
console.log("setTimeout1");
// 构造函数的代码是不会被加入到任务队列里面的,会被放入到main script,会被直接执行
new Promise(function (resolve) {
resolve();
}).then(function () {
new Promise(function (resolve) {
resolve();
}).then(function () {
console.log("then4");
});
console.log("then2");
});
});
new Promise(function (resolve) {
console.log("promise1");
resolve();
}).then(function () {
console.log("then1");
});
setTimeout(function () {
console.log("setTimeout2");
});
console.log(2);
queueMicrotask(() => {
console.log("queueMicrotask");
});
new Promise(function (resolve) {
resolve();
}).then(function () {
console.log("then3");
});
//输出:
promise1
2
then1
queueMicrotask
then3
setTimeout1
then2
then4
setTimeout2
3.2
async function bar() {
console.log("2222222");
return new Promise((resolve) => {
resolve();
});
}
async function foo() {
console.log("1111111");
await bar();
// 3333的执行必须等到bar()调用了resovle才会执行。
// 因为调了resolve,所以可以3333是被放到then()里面了,被放到微任务里面
console.log("3333333");
}
foo();
console.log("4444444");
// 输出:
// 1111111
// 2222222
// 4444444
// 3333333
3.3
async function async1() {
console.log("async1 start");
await async2();
console.log("async1 end");
}
async function async2() {
console.log("async2");
}
console.log("script start");
setTimeout(function () {
console.log("setTimeout");
}, 0);
async1();
new Promise(function (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
4、Node事件循环
边栏推荐
- MySQL and PostgreSQL methods to grab slow SQL
- 考研英语二大作文模板/图表作文,英语图表作文这一篇就够了
- Interview with meituan, a 34 year old programmer, was rejected: only those under the age of 30 who work hard and earn little overtime
- Leetcode739 daily temperature
- lombok常用注解
- drools执行指定的规则
- CDH存在隐患 : 该角色的进程使用的交换内存为xx兆字节。警告阈值:200字节
- Lekao: 22 year first-class fire engineer "technical practice" knowledge points
- 刷题---二叉树--2
- 趣味 面试题
猜你喜欢

Interview with meituan, a 34 year old programmer, was rejected: only those under the age of 30 who work hard and earn little overtime

Fresh, 2022 advanced Android interview must know 100 questions (interview questions + answer analysis)

趣味 面试题

PR 2021 quick start tutorial, learn about the and functions of the timeline panel

mysql数据库基础

Take you ten days to easily finish the finale of go micro services (distributed transactions)

Mysql database foundation

堆(優先級隊列)

Experiment of connecting mobile phone hotspot based on Arduino and esp8266 (successful)

Thesis translation: 2022_ PACDNN: A phase-aware composite deep neural network for speech enhancement
随机推荐
考研英语二大作文模板/图表作文,英语图表作文这一篇就够了
Sort---
[old horse of industrial control] detailed explanation of Siemens PLC TCP protocol
arcgis js 4.x 地图中加入图片
【工控老马】西门子PLC Siemens PLC TCP协议详解
Deep understanding of P-R curve, ROC and AUC
Go learning notes - multithreading
mysql索引和事务
(C language) 3 small Codes: 1+2+3+ · · +100=? And judge whether a year is a leap year or a normal year? And calculate the circumference and area of the circle?
The blink code based on Arduino and esp8266 runs successfully (including error analysis)
Writing method of then part in drools
二分刷题记录(洛谷题单)区间的甄别
Discrimination of the interval of dichotomy question brushing record (Luogu question sheet)
LeetCode—剑指 Offer 37、38
Leetcode - Sword finger offer 59 - I, 59 - II
Heap (priority queue)
MySQL与PostgreSQL抓取慢sql的方法
Less than three months after the programmer was hired, the boss wanted to launch the app within one month. If he was dissatisfied, he was dismissed immediately
分布式机器学习框架与高维实时推荐系统
Maximum profit of jz63 shares