我有像这样的对象
JSON_DATA = {
"EVENT" : "data/sequence/sequenceEvent.json",
"CHAT" : "data/sequence/sequenceChat.json",
}
我想加载这些值,所以我这样做
LoadJSON(JSON_DATA, function(data){
var DATA = data;
});
function LoadJSON(jsons, callback){
var counterLoaded = 0;
var counterToLoad = Object.keys(jsons).length;
var parsedData = {};
for(var key in jsons){
ajax.get(jsons[key], "", function(data){
parsedData[key] = JSON.parse(data);
counterLoaded++;
if(counterLoaded == counterToLoad){
callback(parsedData);
}
}, true)
}
}
现在,我知道我有一个闭包问题,就像钥匙永远是最后一个。
但是,我在互联网上搜索,并期望一个setTimeOut或像这样的函数
function LoadJSON(jsons, callback){
var counterLoaded = 0;
var counterToLoad = Object.keys(jsons).length;
var parsedData = {};
for(var key in jsons){
ajax.get(jsons[key], "", (function(key){
parsedData[key] = JSON.parse(data);
counterLoaded++;
if(counterLoaded == counterToLoad){
callback(parsedData);
}
})(key), true)
}
}
它不起作用,但在我的问题中,我还需要传递参数数据。
我怎样才能实现这一目标?
答案 0 :(得分:2)
键始终是最后一个。
选项1:使用闭包。
for (var key in jsons) {
(function(k) {
ajax.get(jsons[k], "", function(data) {
parsedData[k] = JSON.parse(data);
counterLoaded++;
if (counterLoaded == counterToLoad) {
callback(parsedData);
}
}, true);
})(key);
}
选项2:使用Promise API。