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的新手所以任何评论都很好,我正在寻找最佳实践,因为我总是遇到这些(同步)问题。消防!
答案 0 :(得分:0)
正如问题评论中所指出的,这是闭包的一个普遍问题 - 如果你正在学习JavaScript,理解它是值得你的时间:)
最简单的解决方法是在i
循环内的函数范围内绑定for
:
for (var i = 0; i < data.length; i++) {
(function(i) {
var childId = data[i].child_id;
// ...
})(i);
}