2016-06-14 11 views
0

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.

+2

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

+0

Sie können eine rekursive Funktionen zum Beispiel verwenden – luschn

Antwort

Verwandte Themen