node之所以轻便高效,是因为它使用了事件驱动(事件环机制),因此在node中有大量的异步的回调函数。但是当异步回调里面嵌套异步回调的时候,就会发生一些混乱的事情,这个时候,我们就需要将嵌套的异步回调改变为同步,只有同步了才能获取一些变量或元素。
下面使用一种方法介绍将异步变为同步,利用自执行函数和递归的思想:
var http = require('http');
var fs = require('fs');
var server = http.createServer(function(req,res){
fs.readdir('./dir/',function(err,files){
var wenjianjia = [];
(function iterator(i){ //自执行函数
if(i == files.length){
return;
}
fs.stat('./dir/'+files[i],function(err,stats){
if(stats.isDirectory()){
wenjianjia.push(files[i])
}
iterator(i+1); //递归
})
})(0)
})
res.end()
})
server.listen(3000)
上面端代码是要访问文件夹dir中的所有文件,并将其中的文件夹放入到文件夹数组中,当使用传统的for循环,在读取文件信息的时候,嵌套了一层回调函数,这个是异步里面套异步,获取files[i]值的时候出现了顺序的混乱,这时候我们使用自执行函数将嵌套的异步变为同步,就会按照顺序执行。