Я работаю над angularJS-приложением, и это мой первый веб-сайт с использованием этой структуры. В моем приложении мне нужно сделать вызов $ http внутри цикла for. Когда в цикле перед следующей итерацией я хочу дождаться ответа от моего предыдущего вызова. Каков наилучший и простой способ сделать это. Я пробовал использовать callBack, $ q.all(), тогда во всех этих случаях проходит только последний запрос. Пожалуйста помоги.
Примечание. Мой 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);
}
результат переменная = $ q.all (обещает);
EDIT: 2 Service Code:
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);
});
};
взглянуть на асинхронном Lib (https://github.com/caolan/async) вы можете загрузить его в браузере через browserify/WebPack/JSPM –