【问题标题】:invoke a function after two events have been triggered在触发两个事件后调用函数
【发布时间】:2016-08-16 18:36:56
【问题描述】:
$scope.$on("stopSpinner", function() {
$('body').mask('hide');
});
上述代码的工作原理是当 stopSPinner 是事件被接收时,它会执行。但我的要求涉及更多。我想在执行一个函数之前等待两个不同的事件接收。事件的顺序可能不同,但我希望仅在两个事件都发生后才执行。怎样才能做到这一点
【问题讨论】:
标签:
angularjs
events
event-handling
broadcast
angularjs-rootscope
【解决方案1】:
使用 $q.all 和 promises,像这样:
var deferred1 = $q.defer();
$scope.$on("stopSpinner", function()
{
$('body').mask('hide');
deferred1.resolve();
});
var deferred2 = $q.defer();
$scope.$on("event2", function()
{
$('body').mask('hide');
deferred2.resolve();
});
$q.all([deferred1, deferred2]).then(
function(){
//your code after the 2 events...
})
这样,您将能够在一个函数中等待 2 个异步任务完成。