首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >超基本javascript回调

超基本javascript回调
EN

Stack Overflow用户
提问于 2017-03-25 17:21:15
回答 2查看 41关注 0票数 0

我以为我被召回了,但我不能让他们在我设置的这个小问题上工作,让我的头脑明白这个概念:

我有一个Twitch.tv流列表(我被转移到处理一个免费的freecodecamp问题)和一个空数组:

代码语言:javascript
复制
var players = ["imaqtpie", "imaqtpie"]; //this guy's always online. It's just easier.
var games = [];

我所要做的就是让每个彩带玩的游戏,并将它传递到“游戏”数组的页面加载。

我有这个:

代码语言:javascript
复制
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,但我不知道如何只玩游戏。

我试过了

代码语言:javascript
复制
var a = $.getJSON('https://wind-bow.gomix.me/twitch-api/streams/' + players[i] + '?&callback=?', function(json) {return json.stream.game});

不起作用,而且

代码语言:javascript
复制
var a = $.getJSON('https://wind-bow.gomix.me/twitch-api/streams/' + players[i] + '?&callback=?', functionTRES);   

有一个单独的functionTRES

代码语言:javascript
复制
function functionTres(data) {
    games.push(data.stream.game);
}; 

返回游戏和json..。

我做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2017-03-25 17:37:12

您需要使用jQuery.when(),因为一旦实现了所有承诺,callback()就应该被取消。因为games是一个数组,所以我们需要使用apply()

代码语言:javascript
复制
$.when.apply($, games).then(function() {
    callback();
});

而不是

代码语言:javascript
复制
callback();

注意:按照当前的代码,games是一个承诺的arrau。

票数 1
EN

Stack Overflow用户

发布于 2017-03-25 17:41:53

代码的问题是,您正在推动$.getJSON(.. )返回的承诺$.getJSON(.. )

这种情况需要改变,这样您就可以听到承诺的返回,并使用其中包含的数据,而不是推送它。因为你是在循环中,你也必须等待所有的承诺回来,即使这不是最好的方式,我所做的只是留下一个基本的退出策略,让你明白我的意思。

只有这样,您才能记录games数组中的内容。我已经修改了您的代码,并在下面添加了它,让您了解我的意思。

值得注意的是,循环的最后一次迭代不一定是返回的最后承诺,正如@Christopher的注释中提到的那样

@Satpal的答案中也提到了一种更好的方法,就是使用一个承诺聚合器,比如$.when()

代码语言:javascript
复制
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();
  });

});
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43019519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档