【发布时间】:2016-12-16 18:53:16
【问题描述】:
我正在调用一个函数scandir(),并带有一个要传递的参数和一个回调函数。一旦这些功能完成,我就会调用那个回调,但是我得到callback is not a function。我不明白我哪里出错了,任何帮助将不胜感激。
脚本文件:
scan_dir(working_dir, function(items){
console.log('done');
dir_items = items;
console.log('items', dir_items);
});
函数文件:
var scan_dir_count = 0;
function scan_dir(path, callback){
scan_dir_count++;
fs.readdir(path, function(err, files){
files.forEach(function(item, index){
//console.log(index, item);
if (fs.lstatSync(path + '/' + item).isDirectory()){
files.push(path + '/' + scan_dir(path + '/' + item));
}
});
scan_dir_count--;
if (scan_dir_count == 0){
console.log('end');
callback(files);
}
});
}
谢谢。
编辑:更新为 4castles 响应。不再返回任何错误,但回调函数似乎没有被触发...
var scan_dir_count = 0;
function scan_dir(path, callback){
scan_dir_count++;
fs.readdir(path, function(err, files){
files.forEach(function(item, index){
//console.log(index, item);
if (fs.lstatSync(path + '/' + item).isDirectory()){
scan_dir(path + '/' + item, function(data){ files.push(item + '/' + data); });
}
});
scan_dir_count--;
if (scan_dir_count == 0){
console.log('end');
console.log(files);
callback(files);
}
});
}
【问题讨论】:
-
您在没有回调的情况下拨打
scan_dir(path + '/' + item)。 -
哦,当然,有道理。所以我添加了
function(){},但这似乎有点笨拙,不仅如此,而且最终的回调似乎没有触发,console.log('end')会但console.log('items', item)不会。 -
这很奇怪。好吧,您可能希望将
files.push放入回调中。因为scan_dir没有返回任何东西。
标签: javascript node.js callback jquery-callback