2016-07-28 4 views
0

私は、.getJSONが非同期呼び出しを行うことを知っています。これは、私がconsole.logに配列の 'ストリーム'を、forループの後にすることができないことを意味します(.getJSONは終了していないので)。しかし、私のJavascriptのほとんどは、これらの呼び出しの結果に依存します!配列の.getJSONを呼び出すにはどうすればいいですか?

しかし、私は実際にすべての.getJSON呼び出しが配列を通して行われるまで待つ必要があります。これは配列の最後の部分に約束を置くことを意味します(私は思う) 。これをやり遂げるにはどうしたらいいですか、あるいは私はこの問題を間違った方法で見ていますか?ありがとう。

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); 
    }); 
} 
+2

使用Promise.all –

答えて

1
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. 
}); 
0

これは1つの解決策です。

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); 
    }); 
}); 
関連する問題