0
我简化了代码以解决特定问题。
我在$范围2个功能:)singleRequest(和multiReqest()。 multiReqest()必须调用testServer()几次然后调用singleRequest()。
问题在这个例子中:)singleRequest(前multiReqest()开始,但在同一时间的console.log( '所有的多请求的请求加载')称为将依次调用。 这是怎么回事?我究竟做错了什么?谢谢。
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功能
- 开始多请求功能
- TESTSERVER:1
- TESTSERVER:2
- TESTSERVER:3
- 单REQ被加载。 XHR加载完成:GET “的http:// ...
- 1 ”多请求要求装“ XHR加载完成:GET” 的http:// ...
- 2 “多请求要求装”。 XHR加载完成:GET “的http:// ...
- 3 ”从多请求要求装“ XHR加载完成:GET” 的http:// ...
- 从多请求所有请求加载
同意Knelis。 – Harpreet
它的工作原理!谢谢 !在C语言将变量名称作为指向函数的指针后不习惯。 但是如果我需要通过参数传递回调函数,例如$ scope.multiRequest(foo(bar)); ? – Archarious
然后,如果在调用回调的位置未知参数,则可以将其包装在另一个函数中。例如。 '$ scope.multiRequest(function(){foo(bar,widget);});'。 – Knelis