我以为我被召回了,但我不能让他们在我设置的这个小问题上工作,让我的头脑明白这个概念:
我有一个Twitch.tv流列表(我被转移到处理一个免费的freecodecamp问题)和一个空数组:
var players = ["imaqtpie", "imaqtpie"]; //this guy's always online. It's just easier.
var games = [];我所要做的就是让每个彩带玩的游戏,并将它传递到“游戏”数组的页面加载。
我有这个:
var players = ["imaqtpie", "imaqtpie"];
var games = [];
function functionUNO(callback) {
var a;
for(i = 0; i < players.length; i++) {
a = $.getJSON('https://wind-bow.gomix.me/twitch-api/streams/' + players[i] + '?&callback=?');
games.push(a);
};
callback();
};
function functionDOS() {
console.log(games);
};
$(document).ready(function(){
functionUNO (function() {
functionDOS();
});
});它正确地返回数组中的json,但我不知道如何只玩游戏。
我试过了
var a = $.getJSON('https://wind-bow.gomix.me/twitch-api/streams/' + players[i] + '?&callback=?', function(json) {return json.stream.game});不起作用,而且
var a = $.getJSON('https://wind-bow.gomix.me/twitch-api/streams/' + players[i] + '?&callback=?', functionTRES); 有一个单独的functionTRES
function functionTres(data) {
games.push(data.stream.game);
}; 返回游戏和json..。
我做错了什么?
发布于 2017-03-25 17:37:12
您需要使用jQuery.when(),因为一旦实现了所有承诺,callback()就应该被取消。因为games是一个数组,所以我们需要使用apply()
$.when.apply($, games).then(function() {
callback();
});而不是
callback();注意:按照当前的代码,games是一个承诺的arrau。
发布于 2017-03-25 17:41:53
代码的问题是,您正在推动$.getJSON(.. )返回的承诺$.getJSON(.. )
这种情况需要改变,这样您就可以听到承诺的返回,并使用其中包含的数据,而不是推送它。因为你是在循环中,你也必须等待所有的承诺回来,即使这不是最好的方式,我所做的只是留下一个基本的退出策略,让你明白我的意思。
只有这样,您才能记录games数组中的内容。我已经修改了您的代码,并在下面添加了它,让您了解我的意思。
值得注意的是,循环的最后一次迭代不一定是返回的最后承诺,正如@Christopher的注释中提到的那样
@Satpal的答案中也提到了一种更好的方法,就是使用一个承诺聚合器,比如$.when()
var players = ["imaqtpie", "imaqtpie"];
var games = [];
function functionUNO(callback) {
var a;
for (i = 0; i < players.length; i++) {
$.getJSON('https://wind-bow.gomix.me/twitch-api/streams/' + players[i] + '?&callback=?').then(function(data) {
games.push(data);
if (i == players.length) {
callback();
}
});
};
};
function functionDOS() {
console.log(games);
};
$(document).ready(function() {
functionUNO(function() {
functionDOS();
});
});<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
https://stackoverflow.com/questions/43019519
复制相似问题