我无法将JSON存储在变量中。当我调用getIndividualMatchJSONObjHelper函数时,json变量本身会打印出来,但变量之外不会存储任何内容。如何在matchParticipantData.specificParticipantData中正确存储JSON变量?
function getIndividualMatchJSONObj(matchData) {
var matchParticipantData = {
specificParticipantData: [numberOfGames]
};
for (var i = 0; i < numberOfGames; i++) {
getIndividualMatchJSONObjHelper(matchData, matchParticipantData, i, function(err, json) {
matchParticipantData.specificParticipantData[i] = json;
});
}
return matchParticipantData;
}
function getIndividualMatchJSONObjHelper(matchData, matchParticipantData, indexIter, callback) {
var individualMatchURL = 'https://na1.api.riotgames.com/lol/match/v3/matches/' + matchData.matchID[indexIter] + '?api_key=' + API_KEY;
var jsonFinal;
async.waterfall([
function (callback) {
request(individualMatchURL, function (err, response, body) {
if (err)
return callback(err);
if (response.statusCode != 200)
return callback(new Error('Status code was ' + response.statusCode));
var json = JSON.parse(body);
for (var j = 0; j < 10; j++) {
if (matchData.championID[indexIter] == json['participants'][j].championId) {
return callback(null, json['participants'][j]);
}
}
});
}
], callback);
}
答案 0 :(得分:0)
在你的getIndividualMatchJSONObj
中for (var i = 0; i < numberOfGames; i++) {
getIndividualMatchJSONObjHelper(matchData, matchParticipantData, i, function(err, json) {
matchParticipantData.specificParticipantData[i] = json;
});
}
return matchParticipantData;
json到你的对象的设置是异步发生的,所以在返回matchParticipantData之后你的json被接收并设置。
你需要以某种方式停止返回,直到json函数完成或转换函数以使用回调来处理/使用数据而不是返回数据。
正常:
function test() {
return "test";
}
用法:
var data = test();
console.log(data);
回调:
function test(callback) {
callback("test");
}
用法:
test(function(data) {
console.log(data);
});