我简化了代码来解决特定问题。
我在 $scope 有 2 个函数:singleRequest() 和 multiReqest()。 multiReqest() 必须多次调用testServer(),然后调用singleRequest()。
此示例中的问题:singleRequest() 在 multiReqest() 启动之前调用,但同时 console.log('All requests from multiRequest returned ') 依次调用。 为什么会发生这种情况?我究竟做错了什么?谢谢。
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
- 测试服务器:3
- 已加载单个请求。 XHR 加载完毕:GET "http://...
- 1“已加载来自 multiRequest 的请求”。 XHR 加载完毕:GET "http://...
- 2“已加载来自 multiRequest 的请求”。 XHR 加载完毕:GET "http://...
- 3“已加载来自 multiRequest 的请求”。 XHR 加载完毕:GET "http://...
- 已加载来自 multiRequest 的所有请求
最佳答案
您没有传递回调,但实际上在此处调用该函数:
$scope.multiRequest($scope.singleRequest()); // Passing return value
所以你应该将其更改为:
$scope.multiRequest($scope.singleRequest); // Passing function
然后将 _callback;
更改为 _callback();
,以调用该函数。
关于javascript - $q Angular 延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36056813/