当前位置:网站首页>浏览器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事件循环
边栏推荐
- Use sqoop to export ads layer data to MySQL
- 防抖 节流
- Multiply LCA (nearest common ancestor)
- IPhone 6 plus is listed in Apple's "retro products" list
- Experiment of connecting mobile phone hotspot based on Arduino and esp8266 (successful)
- Error in kubeadm join: [error port-10250]: port 10250 is in use [error fileavailable--etc kubernetes PKI
- Drools executes the specified rule
- 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?
- AI mid stage technology research
猜你喜欢

mysql数据库基础

Anxiety of a 211 programmer: working for 3 years with a monthly salary of less than 30000, worried about being replaced by fresh students

kubenetes中port、targetPort、nodePort、containerPort的区别与联系

Jenkins voucher management

Sort---

测试左移和右移

drools决策表的简单使用

Lekao.com: experience sharing of junior economists and previous candidates in customs clearance

Adding database driver to sqoop of cdh6

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
随机推荐
字符串回文hash 模板题 O(1)判字符串是否回文
初始JDBC 编程
Go learning notes - multithreading
[ybtoj advanced training guide] similar string [string] [simulation]
Experiment of connecting mobile phone hotspot based on Arduino and esp8266 (successful)
[old horse of industrial control] detailed explanation of Siemens PLC TCP protocol
(C language) input a line of characters and count the number of English letters, spaces, numbers and other characters.
ThreadLocal的简单理解
BOM DOM
OpenCV中cv2.VideoWriter_fourcc()函数和cv2.VideoWriter()函数的结合使用
The blink code based on Arduino and esp8266 runs successfully (including error analysis)
kubeadm join时出现错误:[ERROR Port-10250]: Port 10250 is in use [ERROR FileAvailable--etc-kubernetes-pki
Drools terminates the execution of other rules after executing one rule
Docker compose configuration mysql, redis, mongodb
【工控老马】西门子PLC Siemens PLC TCP协议详解
Find the factorial of a positive integer within 16, that is, the class of n (0= < n < =16). Enter 1111 to exit.
记录一下MySql update会锁定哪些范围的数据
[C language] convert decimal numbers to binary numbers
二分刷题记录(洛谷题单)区间的甄别
Gaode map test case