Я работаю над приложением angularJS, и это мой первый веб-сайт, использующий эту структуру. В моем приложении мне нужно сделать вызов $http внутри цикла for. В цикле перед следующей итерацией я хочу дождаться ответа от моего предыдущего вызова. Как лучше и проще всего это сделать. Я пробовал использовать callBack, $q.all(), .then во всех них проходит только последний запрос. Пожалуйста помоги.
Примечание. Мой API, который я вызываю через $http, не может ставить запросы в очередь.
Редактировать: я пробовал оба приведенных ниже подхода, в обоих случаях успешно выполняется только последний запрос. Можете ли вы сказать мне, что я здесь делаю неправильно?
Подход 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)
{
...
}
Подход 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 = $q.all(обещания);
EDIT :2 Код услуги:
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);
});
};