Ich arbeite mit Facebook Graph API mit AngularJS. Es hat eine Funktion namens FB.api();
, die ein Antwortobjekt zurückgibt, das einige Daten enthält. Dies ist jedoch eine asynchrone Funktion. Ich würde gerne wissen, wie ich auf diese Funktion warten muss, bevor ich mit dem Rest des Skripts fortfahre.Warten auf das Zurückgeben einer asynchronen Funktion?
Betrachten Sie den folgenden Code ein:
var data = [];
FB.api('/' + response.data[i].id + '/tags', 'GET', {}, function(response) {
for(var j = 0; j < response.data.length; j++) {
var friend = {
id: response.data[j].id,
name: response.data[j].name
};
FB.api('/' + response.data[j].id + '/picture?width=200&height=200', 'GET', function(response) {
friend.url = response.data.url;
});
$timeout(function() {
data.push(friend);
}, 3000);
}
});
Ich versuche eine Funktion zu erstellen, die eine Liste von Objekten zurückgibt. Ich durchlaufe die Daten und speichere die Daten, die ich in einem Objekt brauche. Innerhalb der Schleife rufe ich die async-API-Funktion erneut auf, um zusätzliche Daten zu erhalten. Diese Funktion wird jedoch nicht sofort zurückgegeben, und daher werden die Daten response.data.url
niemals im Objekt friend
gespeichert.
Ich habe Angulars &timeout
Dienst verwendet, um das Warten auf diese Funktion zu simulieren; Dies scheint jedoch eine sehr hacky Technik zu sein. Gibt es eine Möglichkeit, auf die Rückkehr aller Funktionen zu warten, bevor ich den Rest des Skripts ausführe?
Bitte versuchen Sie, wenn möglich Codebeispiele vorzuschlagen.
Loops und asynchrone Rückrufe nicht gut mischen. Vielleicht sollten Sie in diese berühmte Antwort http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call – elclanrs
Sie können eine rekursive Funktionen zum Beispiel verwenden – luschn