1

angularjs 1.0.2 で promise を見ていると、奇妙な動作が発生します。

promise が変更された後に古い値と新しい値を取得する代わりに、関数が 2 回呼び出されます。最初は新しい値が未定義で、2 回目は古い値が未定義です。

ここにデモがあります(結果はコンソールに表示されます):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);
    });

}

なぜそのように動作するのか、通常の値と同じ動作を得る方法はありますか?

4

0 に答える 0