Wie füge ich eine Callback-Funktion nach einem asynchronen forEach Loop hinzu? HierRückruf nach Async forEach AngularJS
ist etwas besser Kontext:
$scope.getAlbums = function(user, callback) {
$scope.albumsList.forEach(function (obj, i) {
$scope.getAlbum(user, obj.id, function(value){
$scope.albums.push(value);
});
});
// callback(); ???
};
$scope.getAlbums('guy123', function(){
// forEach loop is all done!
console.log($scope.albums)
});
Controller:
.controller('Filters', ['$scope','Imgur', function($scope, Imgur) {
$scope.getAlbum = function(user, id, callback) {
Imgur.album.get({user:user, id:id},
function(value) {
return callback(value.data);
}
);
}
$scope.getAlbums = function(user, callback) {
// Callback function at end of this forEach loop?
// Request is async...
$scope.albumsList.forEach(function (obj, i) {
$scope.getAlbum(user, obj.id, function(value){
$scope.albums.push(value);
});
});
};
)]};
Service:
.factory('Imgur', function($resource) {
return {
album : $resource('https://api.imgur.com/3/account/:user/album/:id')
}
});
Dies ist jedoch genau das, was ich brauchte, wenn ich mit externen Ressourcendaten versuche --- es hält es nicht für versprechend;) ... Könnten Sie bitte ein Beispiel mit irgendwelchen API-Daten wie Twitter geben? –
Da Sie die Ressource '$ resource' verwenden, die auch eine Verheißung zurückgibt, müssen Sie Ihren Code so ändern, dass er die Versprechen zusammenfasst, und der Aufruf von' resolve() 'startet den gesamten Mechanismus. –
Siehe Update mit Beispiel auf jsfiddle, die simulierten Ajax Post. –