Случайная последовательность ответа в $http.get
Я пытаюсь написать функцию, которая отправляет несколько запросов на сервер в зависимости от количества идентификаторов в idArray
, Проблема, с которой я сталкиваюсь, заключается в том, что данные, которые помещаются в dataArray
не следует правильной последовательности соответствующих идентификаторов idArray
, Я пытался добавить timeout
к запросам HTTP, так что предыдущий запрос полностью обрабатывается до следующей итерации for
петля, но это тоже не похоже на работу. Пожалуйста помоги.
function commonService($http, $q) {
return {
getAboutContent: function() {
var dataArray = [];
var deferred = $q.defer();
var idArray = ['about2', 'about3'];
var count = 0;
angular.forEach(idArray, function(id) {
$http.get('server url/' + id).success(function(data) {
dataArray.push(data);
count++;
if (count == idArray.length) {
deferred.resolve(dataArray);
}
}).error(function(error) {
console.log('error', error);
deferred.reject(error);
});
});
return deferred.promise;
}
}
}
1 ответ
Вы не можете с уверенностью сказать, что первый AJAX-вызов будет завершен первым, поскольку это асинхронный вызов. Так что, если вы делаете 3 звонка, используя ваш for
В цикле вы не можете гарантировать, что ответ придет в том же порядке. Итак, если вы можете вернуть id
с сервера AJAX Call тогда вы можете написать так:
function commonService($http, $q) {
return {
getAboutContent: function() {
var dataArray = [];
var deferred = $q.defer();
var idArray = ['about2', 'about3'];
var count = 0;
angular.forEach(idArray, function(id) {
$http.get('server url/' + id).success(function(data) {
// Return the "id" from the response and get the index position in the "idArray"
var idIndex = idArray.indexOf(data.id);
// Then insert data into the specific index as of "id"
dataArray[idIndex] = data;
count++;
if (count == idArray.length) {
deferred.resolve(dataArray);
}
}).error(function(error) {
console.log('error', error);
deferred.reject(error);
});
});
return deferred.promise;
}
}
}