在节点中用回调作为参数发出事件是不好的做法吗?
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();
})
编辑:在写完这个问题之后,我意识到通过提供一个可以被多个听众拦截的事件的延续回调,会使目的失败,所以我认为我不会采用这种方法。
答案 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);
但是,当然,我可能完全误解了你的要求:)