我正在尝试使用“learnyounode”来学习node.js.有一个练习,其中一个应该采用文件夹路径和文件扩展名类型作为输入,然后在该文件夹中将该类型的所有文件作为输出。我构建了这个程序:
var fs = require('fs');
var pathModule = require('path');
var path = process.argv[2];
var ext = '.'.concat(process.argv[3]);
filteredList = [];
fs.readdir(path,function doneReading(err, list){
for(var i = 0; i < list.length; i++){
if(pathModule.extname(list[i]) == ext){
filteredList.push(list[i]);
}
}
})
for(var i = 0; i < filteredList.length; i++){
console.log(filteredList[i]);
}
由于某种原因
filteredList.push(list[i]);
对filteredList的内容没有影响。为什么是这样?我已经通过将console.log移动到readdir函数内来解决了这个问题,但是我不知道为什么psuh不起作用。
答案 0 :(得分:1)
函数doneReading
确实会影响filteredList
,只是你没有等待它。 fs.readdir
函数是异步的,它需要回调。当调用它们的方法完成其工作时,将调用回调。回调不会阻止程序执行,从而将列表打印为null。尝试将代码更改为:
fs.readdir(path,function doneReading(err, list){
for(var i = 0; i < list.length; i++){
if(pathModule.extname(list[i]) == ext){
filteredList.push(list[i]);
}
}
for(var i = 0; i < filteredList.length; i++){
console.log(filteredList[i]);
}
})