可能重复:
angularjs -承诺在控制器未曾解决
我在一家AngularJS服务包一个缓慢的WebSockets服务器,然后调入从我的控制器,服务。 如果我连锁回调到回调到回调,一切都运行得很好,任何用户界面异步更新。
当我尝试使用$q.defer()
清理回调的那件事情,似乎我的延期不会被调用。 我熟悉的从Python的扭曲推迟的概念,所以我认为从概念上就可以工作了 - 但事实并非如此。
这是我能想出,慢的WebSockets服务器模拟了一个setTimeout函数最短的例子。
<!doctype html>
<html ng-app="beta">
<head>
<title>Beta</title>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular.min.js"></script>
<script>
var beta = angular.module('beta', []);
var BetaCtrl = function ($scope, betaServ) {
$scope.button = function () {
serv_result = betaServ.slow();
console.log(serv_result);
serv_result.then(function (result) {
console.log('callback finished');
});
}
}
beta.service('betaServ', function($q) {
this.slow = function () {
d = $q.defer()
setTimeout(function () {
console.log('before resolve');
d.resolve();
console.log('after resolve');
}, 2000);
return d.promise;
}
});
</script>
</head>
<body>
<div ng-controller="BetaCtrl">
<button ng-click="button()">Run</button>
</div>
</body>
</html>
该会应如下运行:
- 点击按钮
- $ scope.button()被调用; 它调用service.slow()函数
- service.slow()返回一个deferred
- 回调注册的延期
- 递延火灾,引发注册的回调(这部分不会发生)
有任何想法吗? 谢谢。