我简化了代码以解决特定问题。
我在$ scope有两个函数: singleRequest()和 multiReqest()。 multiReqest()必须多次调用 testServer(),然后调用 singleRequest()。
此示例中的问题:在 multiReqest()启动之前调用 singleRequest(),但同时 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());
}
控制台日志:
答案 0 :(得分:1)
你没有传递回调,但实际上是在这里调用函数:
$scope.multiRequest($scope.singleRequest()); // Passing return value
所以你应该改为:
$scope.multiRequest($scope.singleRequest); // Passing function
然后将_callback;
更改为_callback();
,以调用该函数。