我正在寻找一些方法来了解两个或多个ajax调用何时完成使用AngularJS,但我只能使用jQuery找到它:
$.when(promise3, promise5).done(
function(threeSquare, fiveSquare) {
console.info(threeSquare, fiveSquare);
}
);
和
var promises = [
$.getJSON('square/2'),
$.getJSON('square/3'),
$.getJSON('square/4'),
$.getJSON('square/5')
];
$.when.apply($, promises).done(function() {
console.info(arguments);
});
有没有办法使用AngularJS做这样的事情? 感谢您的支持!
答案 0 :(得分:9)
您需要查看$ q.all();你可以阅读它here。
这是一个片段:
所有(承诺)
将多个承诺合并到一个在何时解决的承诺中 所有的输入承诺都得到了解决。
参数promises - {Array。} - 一系列承诺。 返回{Promise} - 返回将要解析的单个promise 带有一组值,每个值对应于promise promises数组中的索引相同。如果有任何承诺 通过拒绝解决,这个由此产生的承诺将得到解决 同样的拒绝。
在1.1.x版本中,您应该可以执行以下操作:
$q.all([
$http.get('square/2'),
$http.get('square/3'),
$http.get('square/4'),
$http.get('square/5')
]).then( function(arrayOfResponses) {
$log.info('all set');
$log.debug(arrayOfResponses);
});
<强>更新强>
从版本1.1.6开始,您应该能够执行以下操作:
var Square = $resource('square/:id', {id:1});
$q.all([
Square.get({id:2}).$promise,
Square.get({id:3}).$promise,
Square.get({id:4}).$promise,
Square.get({id:5}).$promise
]).then(function(arrayOfResponses) {
$log.info('all set');
$log.debug(arrayOfResponses);
});