node.js之把异步变同步(承接上一篇文章)
2018-10-12 12:57
288 查看
[code]var http = require("http"); var fs = require("fs"); var server = http.createServer(function(req,res){ //不处理收藏夹小图标 if(req.url == "/favicon.ico"){ return; } //遍历album里面的所有文件,文件夹 fs.readdir("./album/",function(err,files){ //files是一个存放文件(夹)名的数组 var wenjianjia = []; //迭代器就是强行把异步的函数,变成同步的函数 //1做完了,再做2;2做完了,再做3. //立即执行,i的值变为0 (function iterator(i){ //检测文件数组中的第0号元素 //解决措施:遍历结束。-----(在解决数据库的一些问题时,也是用下面的if return) if(i == files.length){ console.log(wenjianjia); return; } fs.stat("./album/" + files[i],function(err,stats){ //检测成功之后做的事情 if(stats.isDirectory()){ //如果是文件夹,那么放入数组。不是,什么也不做。 wenjianjia.push(files[i]); } //然后再迭代下一个.这样就能把stat异步变成同步。 //缺点:会产生下标越界,数组会无限增加,永远结束不了 //改进措施添加在第16行解释下面 iterator(i+1); }); })(0); }) res.end(); }); server.listen(3000,"127.0.0.1");
使用了立即执行函数,把异步强制变成了同步。
但是有一个数组越界的缺点,所以在开头的时候if 一下进行判断。
if return 在数据库中也经常用到。
阅读更多
相关文章推荐
- node.js 学习第四天 请求的方式 同步--异步请求数据
- node.js 异步变同步——获取一个文件夹内的所有文件夹
- 我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
- Node.js学习(5)----异步I/O和同步
- node.js中同步和异步共同使用时应额外注意
- 我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
- 利用async和await异步操作解决node.js里面fs模块异步读写,同步结果的问题
- Node.js文件的同步异步事件循环
- Node.js_同步/异步回调
- node.js中的forEach()是同步还是异步呢
- node.js异步转同步 fibers模块
- Node.js入门非常好的一篇文章推荐
- Node.js入门非常好的一篇文章推荐
- Node.js模拟发起http请求从异步转同步的5种用法
- Node.js的学习历程二同步异步调用等基础知识的理解
- 我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
- node.js——async同步异步
- Node.js的那些坑(四)——如何让异步并发方法同步顺序执行
- node.js在windows下的学习笔记(4)---同步,异步,回调的概念
- 修改上一篇文章的node.js代码,支持调用自定义页面