Node.js笔记 --了不起的Node.js
来源:互联网 发布:自制二维码软件 编辑:程序博客网 时间:2024/05/01 09:58
1.对于单线程,事件驱动的理解
书上51页的file-explorer程序,是用函数以及递归的方式将每个文件列出来,我想改成循环实现:
for (var i = 0; i < files.length; i++) {var filename = files[i];fs.stat(__dirname + '/' + filename, function(err, stat){if(stat.isDirectory()){console.log(' '+i+' \033[36m' + filename + '/\033[39m');}else{console.log(' '+i+' \033[90m' + filename + '\033[39m');}}); };
结果:列出的3个文件都是最后一个文件。
原因:事件驱动,fs.stat会等待事件,for循环3次都完成后,i变为3,filename为files[2],然后顺序执行了3次fs.stat,因此输出"3 package.json"3次。
书上的正确代码:
function file(i){var filename = files[i];fs.stat(__dirname + '/' + filename, function(err, stat){if(stat.isDirectory())console.log(' '+i+' \033[36m' + filename + '/\033[39m');elseconsole.log(' '+i+' \033[90m' + filename + '\033[39m');i++;if(i == files.length){console.log('');}elsefile(i);});/*for (var j = 0; j < 1000000000; j++) {};console.log(' loading');*/ }file(0);
file(0)执行到fs.stat时,注册事件但不执行,到了函数末尾再执行(注释部分会先执行,等待几秒然后打印loading,然后再打印stat,接着递归file(1))
0 0
- Node.js笔记 --了不起的Node.js
- [读书笔记] 了不起的Node.js
- 《了不起的Node.js》读后感
- 了不起的Node.js读书笔记
- Node中的事件轮询(摘自了不起的node.js)
- Node.JS学习笔记
- node.js学习笔记
- Node.js笔记
- Node.js入门笔记
- Node.js 学习笔记
- Node.js入门笔记
- node.js学习笔记
- node.js 学习笔记
- Node.js笔记
- Node.js 学习笔记
- Node.js笔记
- Node js 学习笔记
- node.js初学笔记
- c# remoting 小实例
- eclipse 打包可执行 jar 包(自动抽取第三方库class文件)
- POJ 3641 Pseudoprime numbers (miller_rabin)
- Easy Task
- Javascript限制网页只能在微信内置浏览器中访问
- Node.js笔记 --了不起的Node.js
- 第26天: join _table
- ios中的动画组
- org mode 使用latex
- 高等数学总结(曲线,曲面积分2)
- 【算法基础】----贪心算法的应用之Huffman编码
- 集火者的动态网站之旅
- baidu echarts
- 获取作用域里的值的4种方法