在你们在循环中嵌套方法之前,这是一个我真正看不到别的方法的例子。不过,我会接受其他建议。
无论如何,我正在使用Dropbox.js SDK作为他们的API。我正在目录中查找基于扩展名给出的文件,给出以下列表和路径:
FILE_EXTENSIONS = [".py",".js",".cpp",".html",".h"];
PATH = "/Developer";
我的代码如下:
var counts = [];
look_for_files(PATH, FILE_EXTENSIONS);
function look_for_files(directory_path, file_extensions){
for (var i = 0; i < file_extensions.length; i++){
current_file = file_extensions[i];
client.search(PATH, current_file, function(error, count){
if(error){
return showError(error);
}
console.log(current_file); // Problem is here.
console.log(count.length);
counts.push(count.length);
});
}
};
现在,当我记录(count.length)时,我得到以下输出:
.h
88
.h
607
.h
665
.h
180
.h
410
数字正在改变,但current_file不是,即使它被传递给方法。我不知道为什么。这是我在javascript编程的第一次体验之一(我来自OOP背景),但我迷路了。有人可以帮忙解释一下吗?
由于
答案 0 :(得分:0)
由于您要发出异步请求,因此会有一段时间延迟。因此,当您的回调方法执行时,for循环已经执行完毕,此时当您记录current_file(console.log(current_file);
)时,索引指向数组中的最后一个元素。 / p>
如果要记录它正在处理的所有文件的名称,请在回调方法之外移动该日志语句,如下所示 -
function look_for_files(directory_path, file_extensions){
for (var i = 0; i < file_extensions.length; i++){
current_file = file_extensions[i];
console.log(current_file); // This wont be a problem any more
client.search(PATH, current_file, function(error, count){
if(error){
return showError(error);
}
console.log(count.length);
counts.push(count.length);
});
}
};
现在,这应该是结果:
// This is when inside the loop
.py
.js
.cpp
.html
.h
// this is the callback
88
607
665
180
410