博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
请教nodejs中promise、setTimeout、setImmediate在eventloop中的执行时机问题
阅读量:5961 次
发布时间:2019-06-19

本文共 962 字,大约阅读时间需要 3 分钟。

代码如下

setTimeout(() => {  console.log('timeout1')  Promise.resolve().then(()=>{		console.log('reslove1')	})}, 0)setTimeout(() => {  console.log('timeout2')  Promise.resolve().then(()=>{		console.log('reslove2')	})}, 0)setImmediate(()=>{	console.log('setImmediate1')})setImmediate(()=>{	console.log('setImmediate2')})Promise.resolve('resolve3').then((data)=>{    console.log(data)})复制代码

输出结果如下:

Node.js 中事件循环分为6个阶段,setTimeout在timers阶段执行,setImmediate在check阶段执行

由于settimeout在timers阶段执行顺序不确定,按我的理解,结果有两种

1.settimeout在当前事件循环执行,输出结果:

'timeout1'>'timeout2'>'resolve3'>'resolve1'>'resolve2'>'setImmediate1'>'setImmediate2'复制代码

2.settimeout在下一个事件循环执行,输出结果:

'resolve3'>'setImmediate1'>'setImmediate2'>'timeout1'>'timeout2'>'resolve1'>'resolve2'复制代码

为何最后结果为,并且结果很稳定:

'resolve3'>'timeout1'>'timeout2'>'resolve1'>'resolve2'>'setImmediate1'>'setImmediate2'复制代码

去掉promise之后,输出结果为

跟预期中一样,结果随机,想来重点是promise造成了影响

求各位大牛指教下!!!谢谢!!!

转载于:https://juejin.im/post/5cc2e56ff265da0379417f87

你可能感兴趣的文章
DEV 等待窗口
查看>>
lombok
查看>>
Dev-FAT-UAT-PRO
查看>>
Android开发学习总结(五)——Android应用目录结构分析(转)
查看>>
[PHP]PHP rpc框架hprose测试
查看>>
Atom 编辑器系列视频课程
查看>>
C#三种定时器
查看>>
范数 L1 L2
查看>>
协同过滤及大数据处理
查看>>
Java8 本地DateTime API
查看>>
[原][osgearth]osgearthviewer读取earth文件,代码解析(earth文件读取的一帧)
查看>>
完美解决html中select的option不能隐藏的问题。
查看>>
推荐5大开源工具,用于开发Kubernetes项目
查看>>
制定2015年的移动开发策略
查看>>
JPA 2.2改进了易用性
查看>>
从蚂蚁金服实践入手,带你深入了解 Service Mesh
查看>>
24周年,“常青树”Delphi发布新版本10.3.1
查看>>
7. 从数据库获取数据- 从零开始学Laravel
查看>>
阿里百川码力APP监控 来了!
查看>>
使用dotenv管理环境变量
查看>>