Javascript - for语句比我的函数运行得更快

时间:2014-08-06 03:11:49

标签: javascript jquery synchronization

for (var i = 0; i < data.length; i++) {
    var childId = data[i].child_id;
    fetchElementDetails(
        childId,
        childTableNameByParentTableName(tableName), 
        function (d) {
            for (var j = 0; j < d.extraVariables.length; j++) {
                if (endsWith(d.extraVariables[j].name, "_id")) {
                    var selector = $("td[data-childId="+childId+"]")
                        .filter("[data-type=" + d.extraVariables[j].name + "]");
                    selector.empty();
                    selector.append(d.extraVariables[j].value);
                }   
            }
        }
    );
}

函数fetchElementDetails()进行ajax调用并花费一些时间来完成,到那时for语句继续,变量childId改变值。如何使for语句等待函数fetchElementDetails()完成然后转到下一次迭代?

我是javascript的新手所以任何评论都很好,我正在寻找最佳实践,因为我总是遇到这些(同步)问题。消防!

1 个答案:

答案 0 :(得分:0)

正如问题评论中所指出的,这是闭包的一个普遍问题 - 如果你正在学习JavaScript,理解它是值得你的时间:)

最简单的解决方法是在i循环内的函数范围内绑定for

for (var i = 0; i < data.length; i++) {
    (function(i) {
      var childId = data[i].child_id;
      // ...
    })(i);
}