Ich versuche einen Viewer zu erstellen, der twitch.tv api verwendet, um ein Array von Twitch-Streamern zu überprüfen und dann zu veröffentlichen, welche Benutzer gerade online sind und was sie streamen. Ich habe einige ernsthafte Probleme herauszufinden, wie man mit der asynchronen Art von Callbacks arbeitet.Wie kann ich warten, bis asynchrone Rückrufe beendet sind, bevor die abgerufenen Daten verwendet werden?
Ich möchte den API-Aufruf einmal für jeden Twitch-Benutzer im Array Schleife. NACHDEM sie alle zurückgekehrt sind, möchte ich in der Lage sein, sie zu sortieren und sie nach bestimmten Kriterien aufzulisten.
Nach viel Forschung versuche ich, Versprechungen zu tun, dies zu tun. Aber ich komme immer noch nicht dazu, das herauszufinden.
Ich habe diese Frage verwendet: How can I wait for set of asynchronous callback functions? und diese Frage: How do I return the response from an asynchronous call? als Richtlinie aber offensichtlich fehlt mir noch etwas Wichtiges. Ich habe den relevanten Teil meines Codes veröffentlicht. Ich würde jede Hilfe/jeden Stoß in die richtige Richtung zu dem, was mir fehlt, schätzen.
$(document).ready(function() {
var channels = ["freecodecamp", "storbeck", "terakilobyte", "habathcx","RobotCaleb","thomasballinger","noobs2ninjas","beohoff","ESL_SC2", "brunofin"];
var test = [];
function getData(){
var promises = [];
for (var i = 0; i < channels.length; i++) {
promises.push($.getJSON('https://api.twitch.tv/kraken/streams/'+channels[i]+'?callback=?', function(data) {}));
}
$.when.apply($, promises).then(function() {
// returned data is in arguments[0][0], arguments[1][0], ... arguments[9][0]
// you can process it here
for(var j=0; j<promises.length; j++){
//console.log(promises[j].responseJSON);
test.push(promises[j]);
}
}, function() {
// error occurred
conole.log("get data error");
});
}
getData();
console.log("do I have data?: ");
for(var j=0; j<test.length; j++){
console.log(test[j].responseJSON); //This is empty and where I need the data!
}
});
Sie sollten 'return' die' $ .when.apply ($, Versprechen) 'von Ihrer Funktion und dann' 'setzen .then (...) nach dem' getData() 'nennen – Bergi