Ich bin durch ein Array mit angular.forEach durchschleifen und eine nicht-eckige Ajax-Bibliothek (Trello client.js) aufrufen. Der Client hat "Erfolgs-" und "Fehler" -Rückrufe, gibt jedoch keine Winkelrückstellung zurück. Ich würde gerne eine Funktion ausführen, sobald alle Ajax-Aufrufe abgeschlossen sind.AngularJS warten auf alle async Anrufe innerhalb foreach Ende
Ich habe den folgenden Code:
$scope.addCards = function(listId)
{
var cardTitles = $scope.quickEntryCards[listId].split('\n');
angular.forEach(cardTitles, function(cardTitle,key)
{
Trello.post('/cards', {
name:cardTitle,
idList:listId
},function(){ }, function(){ });
});
//TODO: wait for above to complete...
$scope.init($routeParams.boardId);
$scope.quickEntryCards[listId] = '';
};
Was kann ich in diesem // TODO tun und in den Callback-Funktionen, so dass die letzten 2 Zeilen nur nach all den Pfosten laufen entweder Erfolg oder Misserfolg?
Ich denke, das bringt mich in die richtige Richtung, aber Trello.post gibt kein Versprechen ab. Also brauche ich einen Haken in die Callbacks, die sie verwenden und ein eckiges Versprechen ... – Daniel
Interessant, ich sehe, dass ich das in Ihrer Frage vermisste. Seltsam, weil es so aussieht, als würde es ein Versprechen geben. Sie können alles mit $ q.defer() versprechen. Ich werde Pseudo-Code zum Beispiel hinzufügen. –
Yep, das hat es getan. Trellos api ist asynchron, nur nicht eckig, also passt es gut (jetzt, wo ich sehe, wie es geht;) Sie können etwas verkürzen, indem Sie deferred.resolve und deferred.reject direkt als Trellos Erfolgs- und Rückruf-Methoden übergeben: Trello.post ('/ Pfad', {}, latent.resolve, deferred.reject); – Daniel