Promise微任务
时间:2021-08-23
本文章向大家介绍Promise微任务,主要包括Promise微任务使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.起因
在看了“浏览器工作原理与实践=》浏览器中的页面循环系统=》宏任务和微任务”的章节后,我了解了微任务的执行时机:当前函数执行完成之前会依次执行当前函数上下文中的微任务队列。那么在一个函数中new Promise执行顺序是什么呢?如下:
function test(resolve, reject){
console.log(3);
resolve(4);
}
function main(){
console.log(1)
const a = new Promise(test)
a.then(val=>{
console.log(val)
})
console.log(2)
}
main()
2.Promise产生微任务的时机
上文的代码执行完后顺序为:
1
3
2
4
这个情况跟我理解的微任务相违背“当前函数执行完成之前会依次执行当前函数上下文中的微任务队列”,Promise作为微任务执行之后至少1紧接着是2,但我却忽略了微任务产生的时机:使用 Promise,当调用 Promise.resolve() 或者 Promise.reject() 的时候,会产生微任务。
所以上述代码执行回调test函数时,并不会产生微任务,而是正常顺序执行的。
3.验证微任务比宏任务优先执行
function test(resolve, reject){
console.log(3);
resolve(4);
}
function main(){
console.log(1)
setTimeout(() => {
console.log(5)
}, 1)
let j =0
for (let i = 0; i < 1000000000; i++) {
j++
}
const a = new Promise(test)
a.then(val=>{
console.log(val)
})
console.log(2)
}
main()
PS:这里的验证不严谨,但大概也能描述出宏任务和微任务执行的顺序,执行结果如下:
1
3
2
4
5
原文地址:https://www.cnblogs.com/-Neo/p/15175466.html
- Github 项目推荐 | 用 Pytorch 实现的 WaveNet-Vocoder
- 重启数据库的一场闹剧(r5笔记第68天)
- 【C语言系列】基础语法案例分析(初级篇)
- 一次ORA-00600问题的排查和分析(r5笔记第64、65天)
- SpringMVC入门就这么简单
- pl/sql中的forall简单测试(r5笔记第63天)
- SpringMVC【开发Controller】详解
- 巧用外部表备份历史数据(r5笔记第62天)
- Github 项目推荐 | 最小化类 AlphaGo Zero 引擎 —— Nochi
- 半自动化运维之快速连接到指定环境(一) (r5笔记第61天)
- Spring【DAO模块】知识要点
- 浅谈exp/imp(上) (r5笔记第81天)
- Java高并发秒杀系统【观后总结】
- 【专业技术】引擎算法探究
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法