当前位置:网站首页>浏览器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事件循环
边栏推荐
- 上传文件时,服务器报错:IOFileUploadException: Processing of multipart/form-data request failed. 设备上没有空间
- lombok常用注解
- MySQL indexes and transactions
- Anti shake throttle
- The programmer and the female nurse went on a blind date and spent 360. He packed leftovers and was stunned when he received wechat at night
- Brush questions --- binary tree --2
- 刷题---二叉树--2
- Use sqoop to export ads layer data to MySQL
- Multiply LCA (nearest common ancestor)
- [ybtoj advanced training guide] similar string [string] [simulation]
猜你喜欢

Tas (file d'attente prioritaire)

CDA数据分析——AARRR增长模型的介绍、使用

Distributed machine learning framework and high-dimensional real-time recommendation system

CDH6之Sqoop添加数据库驱动

The programmer and the female nurse went on a blind date and spent 360. He packed leftovers and was stunned when he received wechat at night

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

drools中then部分的写法

Drools dynamically add, modify, and delete rules

mysql索引和事务

Map and set
随机推荐
寻找二叉树中任意两个数的公共祖先
When uploading a file, the server reports an error: iofileuploadexception: processing of multipart / form data request failed There is no space on the device
高德地图测试用例
MySQL indexes and transactions
Programmers can't find jobs after the age of 35? After reading this article, you may be able to find the answer
Fluent fluent library encapsulation
Calculate the maximum path sum of binary tree
China traffic sign detection data set
OpenCV中cv2.VideoWriter_fourcc()函数和cv2.VideoWriter()函数的结合使用
Leetcode922 sort array by parity II
Brush questions --- binary tree --2
Docker-compose配置Mysql,Redis,MongoDB
Leetcode - Sword finger offer 59 - I, 59 - II
LeetCode—<动态规划专项>剑指 Offer 19、49、60
Input a three digit number and output its single digit, ten digit and hundred digit.
Map and set
Adding database driver to sqoop of cdh6
CV2 in OpenCV VideoWriter_ Fourcc() function and cv2 Combined use of videowriter() function
BOM DOM
[I'm a mound pytorch tutorial] learning notes