Ich schreibe einen Angular.js-Dienst, um einige JSON
Feeds zu ziehen. Anfänglich weiß der Dienst nicht, welche/wie viele Ressourcen anzufordern sind; Sie sind abhängig von IDs, die von einer anderen Anfrage zurückgegeben werden.Javascript Angular: wie unbekannte Anzahl von Versprechen zu verketten
Ich habe Kopfschmerzen die $http
Service-Anfragen zusammen verketten. Gibt es ein allgemein verwendetes Muster, um dies zu tun?
Ich habe versucht, die Array.reduce
Technik in einem anderen Thread vorgeschlagen, hatte aber Probleme beim Synchronisieren der IDs und der angeforderten Daten.
Das ist was ich bisher habe. Hat jemand irgendwelche Vorschläge?
aService.factory('dummy', function($http){
// Dummy resources.
var resources = [
'http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js',
'http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js',
'http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js'
];
return {
data: function(callback){
var jquerySources = []
var promiseChain = $http({method: 'GET', url: resources[0]});
var l = resources.length
for (var i = 1; i < l; i++){
promiseChain.then(function(data){
jquerySources.push({
url: resources[i],
source: data
});
promise_chain = $http({method: 'GET', url: resources[i]});
if (i === l){
return callback(jquerySources);
}
});
}
}
}
});
Thankyou.
Haben Sie tatsächlich benötigen, um jede Ressource wiederum zu laden? Wenn nicht, können Sie nicht einfach mehrere Anfragen auslösen und dann warten, bis alle Versprechen gelöst sind? – codemonkey
Benötigen Sie sie sequentiell auszuführen oder können sie parallel laufen? –