如何在数组上调用.getJSON

How do I call .getJSON on an array?

本文关键字:调用 getJSON 数组      更新时间:2023-09-26

我知道.getJSON进行异步调用。这意味着我无法在for循环之后对数组"streams"进行console.log(因为.getJSON还没有完成)。然而,我的大部分Javascript都取决于这些调用的结果!我认为这就是承诺的来源。

但我真的需要等到所有.getJSON调用都通过数组进行,这意味着只将promise调用放在数组的最后一部分(我认为)。我应该怎么做,还是我看待这个问题的方式不对?谢谢

var reg_users = ["ESL_SC2", "OgamingSC2", "cretetion", "freecodecamp", "storbeck", "habathcx", "RobotCaleb", "noobs2ninjas"];
var streams = [];
for (var i = 0; i < reg_users.length; i++) {
  $.getJSON('https://api.twitch.tv/kraken/streams/' + reg_users[i] + '?callback=?', function(data) {
    streams.push(data);
  });
}
var reg_users = ["ESL_SC2", "OgamingSC2", "cretetion", "freecodecamp", "storbeck", "habathcx", "RobotCaleb", "noobs2ninjas"];
var reqs = [];
for (var i = 0; i < reg_users.length; i++) {
  reqs.push($.getJSON('https://api.twitch.tv/kraken/streams/' + reg_users[i] + '?callback=?'));
}
Promise.all(reqs).then((res) => {
  // do things with responses here.
});

这里有一个解决方案。

var reg_users = ["ESL_SC2", "OgamingSC2", "cretetion", "freecodecamp", "storbeck", "habathcx", "RobotCaleb", "noobs2ninjas"];
var streams = [];
var promises = [];
for (var i = 0; i < reg_users.length; i++) {
  promises.push($.getJSON('https://api.twitch.tv/kraken/streams/' + reg_users[i] + '?callback=?'));
}
Promise.all(promises).then(function(all_data){
  // all_data is a list of response
  all_data.forEach(function(data){ 
    streams.push(data);
  });
});