AngularJS $ q.all更新/通知未调用为什么?

时间:2015-02-04 13:42:43

标签: angularjs q angular-promise

所以我有一个使用$ q.all来批量资源调用的简单示例,我想知道为什么我的更新处理程序从未被调用过?

我原本以为在每个承诺成功完成后都会被调用?

仅调用结果处理程序。我做错了什么?

以下是代码段:

      var promises = [];
        angular.forEach($scope.mappedData, function(item) {
            var resource = new Resource(item);
            promises.push(resource.$save());
        });

        $q.all(promises).then(
            function(result) {
                console.log('result', result);

            },
            function(error) {
                console.log('error', error);

            },
            function(notify) {
                console.log('notify', notify);
            }
        );

2 个答案:

答案 0 :(得分:3)

$ q.all创建了一个新的单一承诺,一旦所有先前的承诺完成,将继续。如果你想单独做每一个,你将不得不单独引用它们。

答案 1 :(得分:1)

我遇到了同样的问题,我带来了这个解决方案。我已经尝试为你的案子安排代码。

var results = [], errors = [], d = $q.defer()
angular.forEach($scope.mappedData, function(item) {
    var resource = new Resource(item);
    resource.$save().promise
    .then(function (result) {
        results.push(result)
        if(results.length == $scope.mappedData.length)
            d.resolve(results) 
    }, function (err) {
        errors.push(err)
        results.push(null) // Very important =P
    }, function (notf) {
        d.notify(notf)
    })
})

d.promise.then(function (results) {
    console.log(results)
}, function (err) {
    console.error(err)
}, function (notf) {
    console.info(notf)
})

让我知道它是否有帮助;)