0

在节点中发出带有回调作为参数的事件是不好的做法吗?

var someonesListened = self.emit('doSomething', param, callback);

if (!someonesListened) {
  callback();
}


// in another module somewhere
this.on('doSomething', function(param, callback) {
    // Something async....

    // Then sometime later 
    callback();
})

编辑:写完这个问题后,我意识到通过为可以被多个侦听器截获的事件提供持续回调会破坏目的,所以我认为我不会采用这种方法。

4

2 回答 2

0

不,如果您知道自己在做什么,这不是一个坏习惯。

但请记住,此回调可能会被多次调用,或者根本不被调用,具体取决于有多少侦听器。如果您对此感到满意,请务必使用回调。

于 2014-04-02T02:23:33.313 回答
0

我不得不尝试在字里行间阅读,但您似乎有以下要求:

  • 您有一个需要只运行一次的回调。
  • 如果没有其他人调用回调,你需要自己做,但是......
  • ...其他人可能会异步调用该回调。

假设是这种情况,您可以使用如下方法:

// define a callback that will exit early if it has already been invoked,
// AND will invoke itself after a 10 second delay, if no one else has.
var hasRun = false, timeoutId = setTimeout(callback, 10000);
function callback() {
    if (hasRun) return;

    hasRun = true;
    clearTimeout(timeoutId);

    // do something cool
}

self.emit('some-event', callback);

但是,当然,我可能完全误读了您的要求:)

于 2014-04-02T02:49:39.537 回答