当前位置:网站首页>浏览器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事件循环
边栏推荐
- CDH存在隐患 : 该角色的进程使用的交换内存为xx兆字节。警告阈值:200字节
- Use sqoop to export ads layer data to MySQL
- Leetcode922 sort array by parity II
- CDA data analysis -- Introduction and use of aarrr growth model
- Lombok common annotations
- 考研英语二大作文模板/图表作文,英语图表作文这一篇就够了
- Jenkins user rights management
- [ybtoj advanced training guidance] judgment overflow [error]
- [C language] Yang Hui triangle, customize the number of lines of the triangle
- BOM DOM
猜你喜欢
WSL 2 will not be installed yet? It's enough to read this article
High performance erasure code coding
Jenkins user rights management
Distributed machine learning framework and high-dimensional real-time recommendation system
CDA data analysis -- Introduction and use of aarrr growth model
趣味 面试题
Use sqoop to export ads layer data to 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?
Jenkins voucher management
Initial JDBC programming
随机推荐
High performance erasure code coding
What is the relationship between NFT and metauniverse? How to view the market? The future market trend of NFT
kubenetes中port、targetPort、nodePort、containerPort的区别与联系
Use sqoop to export ads layer data to MySQL
mysql数据库基础
[I'm a mound pytorch tutorial] learning notes
刷题---二叉树--2
CDH6之Sqoop添加数据库驱动
Experiment of connecting mobile phone hotspot based on Arduino and esp8266 (successful)
5g era, learning audio and video development, a super hot audio and video advanced development and learning classic
Go learning notes - go based interprocess communication
Drools dynamically add, modify, and delete rules
Sub thread get request
浏览器存储方案
Leetcode - Sword finger offer 59 - I, 59 - II
[ybtoj advanced training guidance] judgment overflow [error]
Lekao: 22 year first-class fire engineer "technical practice" knowledge points
Leetcode922 sort array by parity II
Performance tuning project case
Docker-compose配置Mysql,Redis,MongoDB