繁体   English   中英

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

[英]Is it bad practice to emit events with callbacks as arguments in node?

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

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();
})

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

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

但是请记住,此回调可以多次调用,也可以根本不调用,这取决于有多少个侦听器。 如果可以的话,请务必使用回调。

我必须尝试在两行之间阅读,但看来您有以下要求:

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

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

// 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);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM