触发两个事件后调用一个函数

时间:2016-08-16 18:36:57

标签: angularjs events event-handling broadcast angularjs-rootscope

  $scope.$on("stopSpinner", function() {
        $('body').mask('hide');
    });

上面的代码适用于当stopSPinner收到事件时,它会执行。但我的要求更少涉及。我想在执行函数之前等待两个不同的事件。事件顺序可能不同,但我希望只在两个事件都发生后才执行。怎么能实现这个目标

1 个答案:

答案 0 :(得分: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个异步任务完成。