Angular JS: łączenie obietnic i cykl trawienia

UWAGA: skrzypce używa starej wersji Angulara i nie działa już więcej, ponieważ od wersji 1.2 silnik szablonów Angular nie obsługuje przezroczystości.

Patrzę na łańcuchowe obietnice wypełnienia mojego zakresu, a następnie posiadanie zakresu automatycznie aktualizuje dom.

Mam jednak z tym problemy. Jeśli zadzwonię „wtedy” na już rozwiązaną obietnicę, to tworzy nową obietnicę (która wywoła funkcję sukcesu asynchronicznie, ale prawie natychmiast). Myślę, że problem polega na tym, że opuściliśmy już cykl trawienia do czasu wywołania funkcji sukcesu, więc dom nigdy się nie aktualizuje.

Oto kod:

<div ng-controller="MyCtrl">
    Hello, {{name}}! <br/>
    {{name2}}<br/>
    <button ng-click="go()">Clickme</button><br/>
    {{name3}}
</div>

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

function MyCtrl($scope, $q) {
    var data = $q.defer();    
    setTimeout(function() {$scope.$apply(data.resolve("Some Data"))}, 2000);
    var p = data.promise;

    $scope.name = p.then(angular.uppercase);
    $scope.name2 = p.then(function(x) { return "Hi "+x;});
    $scope.go = function() {
            $scope.name3 = p.then(function(x) { 
                // uncomment this to make it work:
                //$scope.$apply();
                return "Finally: "+x;
            });
    };
 }

http://jsfiddle.net/QZM4d/

Czy jest jakiś sposób, aby ta praca była wykonywana bez wywołania $ za każdym razem, gdy obiecuję obietnicę?

questionAnswers(1)

yourAnswerToTheQuestion