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);
});
}
なぜそのように動作するのか、通常の値と同じ動作を得る方法はありますか?