Javascript 如何等待主干中的所有事件处理程序?

Javascript 如何等待主干中的所有事件处理程序?,javascript,backbone.js,Javascript,Backbone.js,当某个事件的所有事件处理程序都完成时,我尝试执行一些操作 我的想法是在以下事件中传递一个对象: self.trigger("my_event", {handlers: x, callback: function}); 在处理程序中,我会写下如下内容: handler = function(lock){ lock.handlers --; if (lock.handlers == 0){ lock.callback(); } } (显然这是锁对象的责任,但您可以看到这个想法

当某个事件的所有事件处理程序都完成时,我尝试执行一些操作

我的想法是在以下事件中传递一个对象:

self.trigger("my_event", {handlers: x, callback: function});
在处理程序中,我会写下如下内容:

handler = function(lock){
  lock.handlers --;
  if (lock.handlers == 0){
    lock.callback();
  }
}
(显然这是锁对象的责任,但您可以看到这个想法)


但我不知道如何获取有关为事件注册的处理程序数量的信息(在我的示例中是x)。这可能吗?还有其他方法吗?

我相信注册的处理程序都是由“trigger”函数本身调用的;因此,当该调用返回时,每个处理程序也都具有。考虑这个例子:

函数checkTriggers(){
var o={};
_.扩展(o、主干、事件);
o、 关于('foo',function(){console.log('ONE');});
o、 关于('foo',function(){console.log('TWO');});
o、 触发器(“foo”);
console.log('THREE');
}

日志序列将始终为一、二、三。因此,似乎您可以在调用“触发器”后简单地执行您的操作。但是,如果任何回调函数使用延迟(例如,使用“setTimeout”),则会出现另一个问题。

如果您也使用jQuery,则可以使用延迟对象的功能:&,特别是
jQuery.when()
函数: