观看承诺时的奇怪行为

时间:2013-08-29 09:54:34

标签: angularjs promise watch

在使用angularjs 1.0.2观看承诺时,我有一种奇怪的行为。

在promise更改后,不再获取旧值和新值,而是调用两次函数。 第一次使用未定义的新值,第二次使用旧值未定义。

这是一个演示(结果显示在控制台中):http://jsfiddle.net/franckv/BqmJv/2/

angular.module('myApp', []);

function Ctrl($scope, $timeout, $q) {
    var j = 0;

    $scope.model = {
        aPromise: $q.when(0),

        getAPromise: function () {
            var deferred = $q.defer();
            deferred.resolve(++j);
            return deferred.promise;
        },
        updateAPromise: function () {
            console.log('\nupdateAPromise called');
            $scope.model.aPromise = this.getAPromise();
        }
    }

    $scope.$watch('model.aPromise', function (newPromise, oldPromise) {
        console.log('newPromise:' + newPromise + ', oldPromise:' + oldPromise);
    });

}

知道为什么它表现得像那样以及如何获得与正常值相同的行为?

0 个答案:

没有答案