$http.get 中的随机响应序列
Random sequence of response in $http.get
我正在尝试编写一个函数,根据 idArray
中的 ID 数量向服务器发送多个请求。我面临的问题是推入 dataArray
的数据不遵循 idArray
的相应 ID 的正确顺序。我尝试将 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;
}
}
}
您不能肯定地说第一个 AJAX 调用将首先完成,因为那是异步调用。因此,如果您使用 for
循环进行 3 次调用,则无法保证响应的顺序相同。因此,假设您可以 return 来自服务器 AJAX 的 id
调用,那么您可以这样写:
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;
}
}
}
我正在尝试编写一个函数,根据 idArray
中的 ID 数量向服务器发送多个请求。我面临的问题是推入 dataArray
的数据不遵循 idArray
的相应 ID 的正确顺序。我尝试将 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;
}
}
}
您不能肯定地说第一个 AJAX 调用将首先完成,因为那是异步调用。因此,如果您使用 for
循环进行 3 次调用,则无法保证响应的顺序相同。因此,假设您可以 return 来自服务器 AJAX 的 id
调用,那么您可以这样写:
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;
}
}
}