【发布时间】:2014-11-02 00:39:21
【问题描述】:
这是我正在运行的一个简单循环:
for (var key in TestApp.config.services) {
if (TestApp.config.services[key].files != "") {
var files = TestApp.config.services[key].files.split(',');
for (var i = 0; i <= files.length - 1; i++) {
var file_url = files[i];
console.log("About to download :" + file_url);
$.getJSON('http://whateverorigin.org/get?url=' + encodeURIComponent(file_url) + '&callback=?', function(data) {
console.log("Downloaded file: " + file_url);
console.log(key);
});
}
}
}
问题在于,在 JSON 请求完成时,key 的值始终相同。如何避免这种竞争条件,以便在 $.getJSON 完成时使用正确的 key 值?
【问题讨论】:
-
我建议将内部 for 循环中发生的事情创建为一个单独的函数,您可以将变量传递给。您可以使用闭包完成相同的操作,但不建议在循环中创建函数。这里有一些关于它的信息tobyho.com/2011/11/02/callbacks-in-loops
标签: javascript jquery ajax for-loop race-condition