Javascript YUI3自定义异步事件在Y.Global上不起作用

Javascript YUI3自定义异步事件在Y.Global上不起作用,javascript,yui3,custom-events,Javascript,Yui3,Custom Events,我正在尝试实现异步事件利用。因此,即使延迟订阅,应用程序也会收到事件传递的通知,类似于加载或就绪事件 到目前为止我有什么,但运气不好 YUI().use('event', 'event-custom', function(Y){ function onCustomEvent () { Y.Global.on('custom:event', function(){ alert('custom fired'); }); } window.setTimeout

我正在尝试实现异步事件利用。因此,即使延迟订阅,应用程序也会收到事件传递的通知,类似于加载或就绪事件

到目前为止我有什么,但运气不好

YUI().use('event', 'event-custom', function(Y){

  function onCustomEvent () {
    Y.Global.on('custom:event', function(){
      alert('custom fired');
    });
  }
  window.setTimeout(onCustomEvent, 2000);
});

YUI().use('event', 'event-custom', function(Y){

  Y.publish('custom:event', {
    emitFacade: true,
    broadcast: 2,
    fireOnce: true,
    async: true
  });

  function fireCustomEvent () {
    Y.Global.fire('custom:event');
  }
  window.setTimeout(fireCustomEvent, 1000);
});
如果有人能提示一下这个代码有什么问题?多谢各位

UPD:


经过一点调查,结果表明,在一个
use()
实例中以及在不使用
Global
广播的情况下,性能良好。这不是缺陷就是局限。仍在发现

好吧,在高层,与全局事件(我如何理解它)的不一致性在于Y对象的沙箱性质。因此,在某个时刻,您可能只全局触发同步事件,从而导致您
subscribe
到在Y实例上生成的自定义事件的异步参数无法进一步传递(并且YUI使用了一些默认值或其他内容)。这可能是有道理的,但为什么这样的事件应该在全球范围内引发呢?要么我错过了YUI的一些重要部分,这就是bug报告的候选者

无论如何,我没有时间深入了解YUI,可能需要40行代码:

YUI.add('async-pubsub', function(Y) {
  var subscribers = {};

  if ( !YUI.asyncPubSub ) {
    YUI.namespace('asyncPubSub');
    YUI.asyncPubSub = (function(){
      var eventsFired = {};
      function doPublishFor(name) {
        var subscriber;

        for ( subscriber in subscribers ) {
          if ( subscriber === name ) {
            (subscribers[name]).call();
            delete ( subscribers[name] ); // Keep Planet clean
          }  
        }
      }
      return {
        'publish': function(name, options) {
          eventsFired[name] = options || {};
          doPublishFor(name);
        },
        'subscribe': function(name, callback) {
          if ( subscribers[name] ) {
            Y.log('More than one async subscriber per instance, overriding it.', 'warning', 'async-pubsub');
          }
          subscribers[name] = callback || function() {};
          if ( eventsFired[name] ) {
            window.setTimeout(
              function () {
                doPublishFor(name);
              },0
            );
          }
        }
      };  
    })();
  }
  Y.asyncPubSub = YUI.asyncPubSub;
}, '1.0', {requires: []});
这里有一些限制和优化空间,比如每个
use
实例只能为一个事件订阅一个操作,但我不需要更多。如果有兴趣的话,我也会在将来尝试

仍然对YUI的行为感到好奇,是虫子还是什么