【发布时间】:2016-03-17 09:45:14
【问题描述】:
我简化了代码来解决一个特定的问题。
我在 $scope 有 2 个函数:singleRequest() 和 multiReqest()。 multiReqest() 必须调用 testServer() 几次,然后再调用 singleRequest()。
本例中的问题:singleRequest() 在 multiReqest() 启动之前调用,但同时 console.log('所有来自 multiRequest 的请求已加载') 依次调用。 为什么会这样?我究竟做错了什么?谢谢。
function TestCtrl($scope, $q, $http) {
//variables declaration etc
var testServer = function (_pos) {
console.log('testServer:', _pos)
var deferred = $q.defer();
$http.get(service.first, parameters).success(function (data, status, headers, config) {
console.log(_pos, 'request from multiRequest loaded');
//do smth with data
deferred.resolve();
}).error(function (err) {
deferred.reject(err);
});
return deferred.promise;
};
//
//
$scope.singleRequest = function () {
console.log('Start singleRequest function');
$http.get(service.second).success(function (data, status, headers, config) {
console.log('Single request loaded');
//do smth with data
});
};
//
//
$scope.multiRequest = function (_callback) {
console.log('Start multiRequest function');
var promises = [];
for (var i = 1; i <= 3; i++) {
promises.push(testServer(i));
}
$q.all(promises).then(function () {
console.log('All requests from multiRequest loaded');
_callback;
});
};
//
$scope.multiRequest($scope.singleRequest());
}
控制台日志:
- 启动 singleRequest 函数
- 启动多请求功能
- 测试服务器:1
- 测试服务器:2
- testServer: 3
- 已加载单个请求。 XHR 完成加载:GET "http://...
- 1“来自 multiRequest 的请求已加载”。 XHR 完成加载:GET "http://...
- 2“来自 multiRequest 的请求已加载”。 XHR 完成加载:GET "http://...
- 3“来自 multiRequest 的请求已加载”。 XHR 完成加载:GET "http://...
- 已加载来自 multiRequest 的所有请求
【问题讨论】:
标签: javascript angularjs q angular-promise