我试着调用Post
方法,然后根据结果,我将多次调用相同的Post
方法并返回结果,使用$ q.all。
我Post
方法是:
getData: function (params, callback) {
$http.post('service/myService', params)
.success(function (data) {
callback(null, data);
}).error(function (error) {
callback(error);
});
}
我在调用它下面的功能,这个功能是递归的,所以如果它包含nextUrl
我做同样的事,直到有用于paging
没有对象:
var result = [];
var promises = [];
var checkForPaging = function (nextUrl, service, $q) {
var deferred = $q.defer();
var criteria = {
url: url
}
var promise = service.getData(criteria, function (error, data) {
if (data.statusCode == 200) {
for (var i = 0; i < data.body.items.length; i++) {
result.push(data.body.items[i]);
}
if (data.body.paging != null && data.body.paging.next != null) {
checkForPaging(data.body.paging.next.url, service, $q);
} else{
deferred.resolve(result);
}
}
});
promises.push(promise);
$q.all(promises)
return deferred.promise;
}
然后我从下面调用这个函数,并且想要在所有调用完成后得到result
:
checkForPaging(data.body.paging.next.url, myService, $q).then(function (data) {
console.log(data)
});
我遇到的问题是,它从不碰上面的回调函数:console.log(data)
。但我可以看到它几次调用Post
方法。
如果我解决它像下面那么我可以先Post
后看到它是打上面的回调:
$q.all(promises).then(function (results) {
deferred.resolve(result);
}, function (errors) {
deferred.reject(errors);
});
我这样做对吗?我如何获得结果并多次调用Post方法?
让我知道如果它不明确或有任何问题!
添加返回的getData $ HTTP – Kindzoku
@Kindzoku你是什么意思? – Zaki
顺便说一句,你为什么需要$ q.all? – Kindzoku