Ich arbeite an einer angularJS App und das ist meine erste Website mit diesem Framework. In meiner App muss ich einen $ http-Aufruf innerhalb einer for-Schleife machen. Mit in der Schleife vor der nächsten Iteration möchte ich auf die Antwort von meinem vorherigen Anruf warten. Was ist der beste und einfachste Weg dies zu tun? Ich habe versucht, mit dem CallBack, $ q.all(), dann in all diesen nur die letzte Anfrage durchläuft. Bitte helfen Sie.
Hinweis: Meine API, die über $ http aufruft, kann keine Anforderungen in die Warteschlange stellen.
Edit: ich beide die folgenden Ansätze versucht haben, in beiden Fällen nur die letzte Anforderung erfolgreich durchgeführt wird. Kannst du mir sagen, was ich hier falsch mache?
Ansatz 1:
var promiseArray=[];
for(var i=0;i<items.length;i++)
{
var promise=services.Post(items[i]);
promiseArray.push(promise);
}
$q.all(promiseArray).then(data)
{
...
}
Ansatz 2:
var promises = [];
for (var i = 0; i < items.length; i++) {
var deffered = $q.defer();
var promise = services.Post(items[i]);
promise.success(function(data) {
deffered.resolve(data);
})
promises.push(deffered);
}
var result = $ q.all (Versprechen);
EDIT: 2 Servicecode:
Services.Post = function(lineItemId, submitUrl) {
var url = (submitUrl) ? submitUrl : Services.serviceUrl;
return $http.post(url, {
"LineItemID": lineItemId
}).
success(function(data, status, headers, config) {
Services.processResponse(data, status, headers, config);
}).
error(function(data, status, headers, config) {
JL('Angular').error('Error response when calling Service ' + config);
});
};
werfen Sie einen Blick auf die Asynchron-lib (https://github.com/caolan/async) Sie es auf dem Browser laden konnte über browserify/webpack/jspm –