这里有一个简单的循环,我跑:Javascript for循环ajax潜在的竞争条件?
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);
});
}
}
}
的问题是,key
值始终是由当时的一样JSON请求完成。如何避免这种竞争条件,以便在$.getJSON
完成时使用正确的key
值?
我建议建立的东西在内部发生的for循环作为一个单独的功能,您可以通过变量。你可以使用闭包完成相同的操作,但不建议在循环中创建函数。这里有一些关于它的信息http://tobyho.com/2011/11/02/callbacks-in-loops/ – Lbatson 2014-11-02 00:55:12