所以我有一个服务mainService
,其中存在创建承诺的函数:
this.myPromise = function() {
var deferred = $q.defer();
var promise = deferred.promise;
return promise;
}
我有一个控制器secondController
,我希望我的代码在承诺解决后运行
mainService.myPromise()
.then(filterpanel)
function filterpanel(handle) { ... }
我还有一个mainController
,我想运行一些代码,当代码成功时,我想解决我服务中的承诺
function count (a * b) {
if ((a * b) === 10) {
mainService.myPromise('ok');
}
}
我试图将myPromise更改为类似的东西,但这似乎不起作用。任何想法我怎么能做到这一点?
this.myPromise = function(data) {
var deferred = $q.defer();
var promise = deferred.promise;
if (data) {
deferred.resolve('ok');
}
return promise;
}
编辑:为什么我需要这是因为当我的应用程序加载时,我通过websocket连接到另一个应用程序。
与该应用程序通信分三步进行
每一步都返回一个唯一的句柄(ID),需要句柄才能进入下一步1> 2> ......
在第3步之后,需要将唯一ID发送给另一个控制器。
我现在的问题是,在完成这3个步骤之前,其他控制器secondController
已经启动,所以我还没有正确的句柄。
这就是为什么我应该做出承诺,以便secondController
等到第一个控制器具有正确的ID。
答案 0 :(得分:0)
如果你没有找到你需要它的原因,那么你的问题就解决了。
jsfiddle上的实例。
angular.module('ExampleApp', [])
.controller('ExampleController', function($scope, mainService) {
$scope.text = "ok";
$scope.action = function() {
mainService.resolve($scope.text);
}
})
.controller('SecondController', function($scope, mainService) {
$scope.subscribe = function() {
mainService.myPromise().then(filterpanel);
}
function filterpanel(handle) {
$scope.textFromExampleCtrl = handle;
console.log('from SecondController', handle);
}
})
.service('mainService', function($q) {
var promise = null;
var deferred = null;
return {
myPromise: function() {
deferred = $q.defer();
promise = deferred.promise;
return promise;
},
resolve: function(val) {
if (deferred)
deferred.resolve(val);
}
}
});

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<div ng-app="ExampleApp">
<div ng-controller="ExampleController">
<input ng-model="text">
<button ng-click="action()">
Action
</button>
</div>
<div ng-controller="SecondController">
<button ng-click="subscribe()">
run Promise
</button>
{{textFromExampleCtrl}}
</div>
</div>
&#13;