Sto eseguendo il looping di un array con angular.forEach e chiamando una libreria ajax non angolare (Trello client.js). Il client ha callback "success" e "error", ma non restituisce un rinvio angolare. Vorrei eseguire una funzione una volta che tutte le chiamate ajax sono state completate.AngularJS attende tutte le chiamate asincrone all'interno della foreach finish
ho il seguente codice:
$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] = '';
};
Che cosa posso fare in quel // TODO e nelle funzioni di callback in modo che le ultime 2 righe eseguiti solo dopo che tutti i messaggi sia esito positivo o negativo?
Penso che questo mi aiuti nella giusta direzione, ma Trello.post non restituisce una promessa. Quindi ho bisogno di collegarmi ai richiami che usano e ad una promessa angolare ... – Daniel
Interessante, vedo che mi mancava nella tua domanda. Strano perché sembra che restituirebbe una promessa. Puoi fare qualsiasi cosa una promessa usando $ q.defer(). Aggiungerò pseudo codice ad esempio. –
sì, l'ha fatto. L'api di Trello è asincrona, non solo promesse angolari, quindi si abbassa piacevolmente (ora che vedo come farlo;) Puoi accorciare un po 'semplicemente passando deferred.resolve e deferred.reject direttamente come i metodi di successo e callback di Trello, come questo: Trello.post ('/ path', {}, deferred.resolve, deferred.reject); – Daniel