注意:小提琴使用旧版本的 Angular,它不再工作,因为从 1.2 开始,Angular 模板引擎不能透明地处理 Promise。
我正在研究链接承诺以填充我的范围,然后让范围自动更新 dom。
不过,我遇到了问题。如果我在已经解决的承诺上调用“then”,它会创建一个新的承诺(它将异步但几乎立即调用成功函数)。我认为问题在于,在调用成功函数时我们已经离开了摘要循环,因此 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 ?