Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-for语句的运行速度比我的函数快 for(变量i=0;i_Javascript_Jquery_Synchronization - Fatal编程技术网

Javascript-for语句的运行速度比我的函数快 for(变量i=0;i

Javascript-for语句的运行速度比我的函数快 for(变量i=0;i,javascript,jquery,synchronization,Javascript,Jquery,Synchronization,函数fetchElementDetails()进行一个ajax调用,需要一些时间才能完成,此时for语句将继续,变量childId将更改值。如何使for语句等待函数fetchElementDetails()完成,然后转到下一次迭代 我是javascript的新手,所以任何评论都是好的,我正在寻找最佳实践,因为我总是遇到这种(同步)问题。开火 正如问题注释中指出的,这是闭包的一个普遍问题-如果您正在学习JavaScript,了解它是值得的:) 最简单的修复方法是将i绑定到for循环中的函数范围内:

函数fetchElementDetails()进行一个ajax调用,需要一些时间才能完成,此时for语句将继续,变量childId将更改值。如何使for语句等待函数fetchElementDetails()完成,然后转到下一次迭代


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

正如问题注释中指出的,这是闭包的一个普遍问题-如果您正在学习JavaScript,了解它是值得的:)

最简单的修复方法是将
i
绑定到
for
循环中的
函数范围内:

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);
                }   
            }
        }
    );
}
for(变量i=0;i
经典的闭包问题。
for (var i = 0; i < data.length; i++) {
    (function(i) {
      var childId = data[i].child_id;
      // ...
    })(i);
}