ПРИМЕЧАНИЕ: скрипка использует старую версию Angular, и она больше не работает, потому что с версии 1.2 механизм шаблонов Angular не обрабатывает промисы прозрачно.
Я изучаю цепочку обещаний для заполнения моей области, а затем автоматически обновляю область действия dom.
Однако у меня возникают проблемы с этим. Если я вызываю «тогда» для уже разрешенного обещания, оно создает новое обещание (которое вызовет функцию успеха асинхронно, но почти сразу). Я думаю, проблема в том, что мы уже вышли из цикла дайджеста к моменту вызова функции успеха, поэтому дом никогда не обновляется.
Вот код:
<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;
});
};
}
Есть ли способ заставить это работать, не вызывая $apply каждый раз, когда я связываю обещания?
go()
? - person Plynx   schedule 02.02.2013