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

时间:2014-04-01 23:20:28

标签: node.js eventemitter

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

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();
})
编辑:在写完这个问题之后,我意识到通过提供一个可以被多个听众拦截的事件的延续回调,会使目的失败,所以我认为我不会采用这种方法。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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);

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