用里面的方法理解javascript循环迭代?

时间:2014-08-22 23:55:14

标签: javascript

在你们在循环中嵌套方法之前,这是一个我真正看不到别的方法的例子。不过,我会接受其他建议。

无论如何,我正在使用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背景),但我迷路了。有人可以帮忙解释一下吗?

由于

1 个答案:

答案 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