AngularJS 承诺从服务返回时不会触发 [英] AngularJS promises not firing when returned from a service
问题描述
可能的重复:
angularjs - 承诺永远不会在控制器中解决
我在 AngularJS 服务中封装了一个慢速 WebSockets 服务器,然后从我的控制器调用该服务.如果我将回调链接到回调到回调上,则一切正常,任何 UI 都会异步更新.
当我尝试使用 $q.defer()
来清理那些乱七八糟的回调时,似乎我的 deferred 永远不会被调用.我熟悉 Python 的 Twisted 中延迟的概念,所以我认为从概念上讲,一切都应该可行 - 但事实并非如此.
这是我能想到的最短的例子,慢速 WebSockets 服务器是用 setTimeout 函数模拟的.
<html ng-app="测试版"><头><title>测试版</title><script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular.min.js"></script><脚本>var beta = angular.module('beta', []);var BetaCtrl = 函数 ($scope, betaServ) {$scope.button = 函数 () {serv_result = betaServ.slow();控制台日志(serv_result);serv_result.then(函数(结果){console.log('回调完成');});}}beta.service('betaServ', 函数($q) {this.slow = 函数 () {d = $q.defer()设置超时(函数(){console.log('解决前');d.解决();console.log('解决后');}, 2000);返回 d. 承诺;}});头部><身体><div ng-controller="BetaCtrl"><button ng-click="button()">运行</button>