对于AngularJS,jQuery“$ .when()。done()”

时间:2013-07-01 21:33:35

标签: javascript jquery ajax angularjs

我正在寻找一些方法来了解两个或多个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做这样的事情? 感谢您的支持!

1 个答案:

答案 0 :(得分:9)

您需要查看$ q.all();你可以阅读它here

这是一个片段:

  

所有(承诺)

     

将多个承诺合并到一个在何时解决的承诺中   所有的输入承诺都得到了解决。

     

参数promises - {Array。} - 一系列承诺。   返回{Pr​​omise} - 返回将要解析的单个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);
});