我这里写了一个代码片段,用来模拟一个嵌套的异步过程,下面我总结了下这段代码的执行顺序var fs = require("fs");

fs.stat('a.txt',callbackOne(err,stat){
//执行callbackOne回调函数
if(err){
fs.readFile("aa.txt",readFileCallbackOne(err,stat){
//执行readFileCallbackOne回调函数
})
}
//说明1
})
fs.stat('b.txt',callbackTwo(err,stat){
//执行callbackTwo回调函数
if(err){
fs.readFile("bb.txt",readFileCallbackTwo(err,stat){
//执行readFileCallbackTwo回调函数
})
}
//说明2
})
//说明0

  代码自上而下执行,由于异步操作所以代码在执行到两个读取文件函数的时候会先把两个时间放入事件队列中,直接执行到"说明0"的位置:

此时事件队列中的事件:

callbackOne

callbackTwo

当执行到"说明0"的位置的时候,nodejs此时会去执行callbackOne,callbackOne里面把文件读完后也会有一个回调事件,此时放入事件队列,事件队列中的事件:callbackOne callbackTwo readFileCallbackOne,此时会走到"说明1"的位置,表示callbackOne执行完成:

此时事件队列中的事件:

callbackTwo

readFileCallbackOne

此时开始进入callbackTwo中执行,在执行callbackTwo的时候回有一个回调readFileCallbackTwo,此时继续放入事件队列中,

事件队列中的事件:callbackTwo readFileCallbackOne readFileCallbackTwo,此时代码走到"说明2"的位置,表示callbackTwo执行完成:

此时事件队列中的事件:

readFileCallbackOne

readFileCallbackTow

然后再去一次执行事件队列中的事件,从而完成整个流程.

												

最新文章

  1. [LeetCode] Count of Range Sum 区间和计数
  2. 1Z0-053 争议题目解析682
  3. 后台启动weblogic成功后,在web浏览器上无法访问
  4. NO.2
  5. winform(公共控件)
  6. object-c 内存管理机制的学习
  7. hdu2089不要62(数位dp)
  8. ASP.NET Core中如何调整HTTP请求大小的几种方式
  9. Linux 基本命令-----常用操作分类
  10. 2017年浙江理工大学程序设计竞赛校赛 题解&源码(A.水, D. 简单贪心 ,E.数论,I 暴力)
  11. 第一个thinkphp项目遇到的知识
  12. 03 使用Tensorflow做计算题
  13. 「SCOI2015」小凸玩密室 解题报告
  14. Mastering MariaDB 神秘的MariaDB 中文翻译版
  15. 理解es6中的const与“不变”
  16. 使用ajax方法实现form表单的提交
  17. 顺便谈谈对于Java程序猿学习当中各个阶段的建议
  18. php使用ffmpeg向视频中添加文字字幕
  19. linux系统调用sysconf
  20. 3.10 Templates -- Development Helpers

热门文章

  1. R语言文本挖掘+词云显示(jiebaR包+wordcloud2包)
  2. 使用cgroups来控制内存使用
  3. [agc011E]Increasing Numbers-[思考题]
  4. 5 admin的使用
  5. WCF 学习笔记一
  6. STM平台增加性能测试/稳定性测试部分【一】
  7. 旧的 .NET Core 项目重新打包出现提示版本不对问题
  8. Jenkins管理插件(备份插件)
  9. TPO-23 C1 Post a student announcement
  10. 信息提示 - bootStrap4常用CSS笔记