3

我一直在寻找一些方法来知道两个或多个 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做这样的事情?谢谢你的支持!

4

1 回答 1

9

你会想看看 $q.all(); 你可以在这里阅读。

这是一个片段:

全部(承诺)

将多个 Promise 组合成一个 Promise,当所有输入 Promise 都解决时,该 Promise 将被解决。

参数 promises – {Array.} – 一个 promise 数组。Returns {Promise} – 返回一个单独的 Promise,它将用一个值数组解析,每个值对应于 Promise 数组中相同索引处的 Promise。如果任何一个 Promise 以拒绝的方式解决,则此结果 Promise 将以相同的拒绝方式解决。

在 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);
});
于 2013-07-01T21:36:52.910 回答