Event Loop
时间:2021-08-03
本文章向大家介绍Event Loop,主要包括Event Loop使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
拿自己写的例子来说明执行顺序
console.log('st');
setTimeout(()=>{
console.log('ed');
}, 0);
let b=async()=>{
console.log('b-st');
return 'b-ed'
}
let a=async ()=>{
console.log('a-st');
return 'a-ed'
}
a()
.then(res=>{
console.log(res);
})
.then(res=>{
console.log('d');
})
.then(res=>{
console.log('f');
})
b()
.then(res=>{
console.log(res);
})
.then(res=>{
console.log('e');
})
.then(res=>{
console.log('g');
})
console.log('c');
//顺序: st, a-st, b-st, c, a-ed, b-ed, d, e, f, g, ed
任务顺序(#a.b表示#宏任务.微任务)
#1.0
console.log('st')
→'st'
setTimeout
→ 将console.log('ed')
推送到#2.0a()
→'a-st'
→ 将后面的.then
推送到#1.1b()
→'b-st'
→ 将后面的.then
推送到#1.1console.log('c')
#1.1
.then
→'a-ed'
→ 将后面的.then
推送到#1.2.then
→'b-ed'
→ 将后面的.then
推送到#1.2
#1.2
.then
→'d'
→ 将后面的.then
推送到#1.3.then
→'e'
→ 将后面的.then
推送到#1.3
#1.3
.then
→'f'
.then
→'g'
#2.0
console.log('ed')
→ 'ed'
如果引入一句await
let w=async()=>{
console.log('w-st');
return 'w-ed'
}
let b=async()=>{
console.log('b-st');
console.log(await w()); //新增的
return 'b-ed'
}
后果就是
- await后的w()会先执行,
- 而b()后续代码推送到#1.1这一步(原本是第一个then推送到#1.1)
- 第一个then被推到了#1.2(原本是第二个then推到#1.2)
所以整体都比原本慢了一拍
最终输出就是:st, a-st, b-st, w-st, c, a-ed, w-ed, d, b-ed, f, e, g, ed
原文地址:https://www.cnblogs.com/exkaede/p/15094425.html
- 教你如何和使用这款强大的渗透平台-Xerosploit
- No.014 Longest Common Prefix
- Java实现解析IP地址的方法,给出一串数字,生成正确的IP地址
- 图解“管道过滤器模式”应用实例:SOD框架的命令执行管道
- No.013 Roman to Integer
- OData – the best way to REST–实例讲解ASP.NET WebAPI OData (V4) Service & Client
- Java实现的手工做乘法方法,给出二个字符串数字,返回相乘结果
- No.012 Integer to Roman
- 黑帽SEO剖析之手法篇
- IOS学习1——IOS应用程序的生命周期及基本架构
- 浅议“全局变量”、“多线程”和“编译器陷阱”
- Java实现的图片合并方法,支持水平和垂直合并
- OC学习15——文件I/O体系
- 用惯了ORM,居然不会写分页SQL了
- 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 数组属性和方法
- 缓冲流---为字节流和字符流复制文件增加缓冲流
- 字符流---输入输出与复制文本文件
- Spring 中的几个 PostProcessor 的区别与联系
- Spring 中基于注解的事务控制及原理分析
- Spring 中根据环境切换配置 @Profile
- Spring 中的属性赋值
- Spring 中控制 Bean 生命周期的几种方式及 BeanPostProcessor 执行原理
- Spring 中的 @Import 注解及向容器中添加 Bean 的几种方式
- Spring 注解开发之 @Conditional
- JDBC 技术应用实践:网上书城后台管理系统
- 思科模拟器:路由器基本配置
- 思科模拟器:实验五——高级路由实验
- 从零开始重新认识 SpringMVC
- 字节跳动Android实习面试凉凉经,两轮面试我被完虐了...
- 高效、简单、方便管理与维护的开源运维工单系统