等待多个单独的承诺解决
Wait for multiple separate promises to resolve
我在不同的控制器之间有angular承诺,我想在所有这些都完成后执行函数。
是否有任何方式,如通过事件或承诺来实现这一点?
查看$q
的文档,特别是$q.all()
。
https://docs.angularjs.org/api/ng/service/美元q
Angular文档非常清楚地说明了如何跨控制器共享数据和方法....服务(和工厂)
如果你发现自己需要协调多个控制器,这表明你需要一个服务。服务的存在就是为了帮助解决这种情况(以及更多)。
看看这个Plunkr: http://plnkr.co/edit/PXVL8YA3lOk7beSvVe5E?p=preview并确保打开控制台,以便您可以看到日志消息。
在方法A-C解决之前,服务的方法D不会执行。
MyService.$inject = ['$q', '$timeout'];
function MyService($q, $timeout) {
var MyService = this;
var deferredA = $q.defer();
var deferredB = $q.defer();
var deferredC = $q.defer();
// go ahead and call method D right away
// it won't fire until all the other methods have completed
methodD();
MyService.methodA = function() {
$timeout(function() {
deferredA.resolve();
console.log("Method A end!");
}, 1000);
console.log("Method A begin!");
};
MyService.methodB = function() {
$timeout(function() {
deferredB.resolve();
console.log("Method B end!");
}, 1000);
console.log("Method B begin!");
};
MyService.methodC = function() {
$timeout(function() {
deferredC.resolve();
console.log("Method C end!");
}, 1000);
console.log("Method C begin!");
};
function methodD() {
$q.all([deferredA.promise, deferredB.promise, deferredC.promise]).then(function() {
console.log("Method D called!");
// reset all the promises and call method D again
deferredA = $q.defer();
deferredB = $q.defer();
deferredC = $q.defer();
methodD();
});
}
}
每个控制器可以在任何时间点调用该服务。方法D只会在所有控制器调用后执行,并且它们各自的承诺都被解决了。
Ctrl1.$inject = ['$scope', 'MyService'];
function Ctrl1($scope, MyService) {
$scope.go = function() {
MyService.methodA();
};
}
Ctrl2.$inject = ['$scope', 'MyService'];
function Ctrl2($scope, MyService) {
$scope.go = function() {
MyService.methodB();
};
}
Ctrl3.$inject = ['$scope', 'MyService'];
function Ctrl3($scope, MyService) {
$scope.go = function() {
MyService.methodC();
};
}
相关文章:
- 简单的ES6承诺问题-交换解决和拒绝参数
- RxJS等待承诺解决
- 如何在解决承诺之前和之后验证值
- AngularJS-我怎么知道何时解决了对父控制器的承诺
- 在我的案例中,如何解决我的承诺问题
- 所有承诺解决后返回
- $.当承诺解决得太早时
- 如果你用另一个承诺解决一个承诺会发生什么
- 基于另一个承诺解决承诺
- 承诺解决不了问题
- 如何知道什么时候所有的承诺都被拒绝了,或者用基本的js承诺解决了
- Ember RSVP承诺解决firefox插件端口消息传递方案无法解决的模型
- 客户端等待服务器承诺解决
- while(true)循环中的承诺/等待承诺解决
- 推迟承诺解决
- 用承诺解决jQuery延迟
- 等待多个单独的承诺解决
- EmberJS - 在承诺解决后调用超级操作
- 如何为另一个承诺解决一个承诺
- 为什么我的承诺散列在传递的承诺解决之前就解决了?