事件和回调,需要在两个事件触发之前等待并调用回调

Ale*_*sky 1 javascript node.js promise rxjs async.js

代码可以简化为类似的东西,

function start(callback) {
    one.on('ready', () => {
        console.log('one server ready');
    });

    two.on('ready', () => {
        console.log('two connection ready');
    });

    one.connect();
    two.start();
}
Run Code Online (Sandbox Code Playgroud)

callback在两个服务进入就绪状态后,我需要调用它.什么是最好的模式?

更新:欢迎使用RxJS如何做到这一点:)

Ben*_*aum 8

你要求承诺,让我们看看我们如何将一次性事件转换为承诺,即宣传发射器:

function ready(ee){
    return new Promise(function(resolve) {
        ee.on("ready", resolve); // resolve when ready
    });
}
Run Code Online (Sandbox Code Playgroud)

哪个会让你这样做:

Promise.all([ready(one), ready(two)]).then(function(){
   // both ready here
});
Run Code Online (Sandbox Code Playgroud)

你可以很容易地汇总承诺非常好:)


pau*_*els 6

RxJS接近它的方法是使用zipwhen/and/thenDo同步,并fromEvent管理EventEmitter

function ready(ee) {
  return Rx.Observable.fromEvent(ee, 'ready');
}

//EITHER
var option1 = Rx.Observable.when(ready(one).and(ready(two))
                                 .thenDo((first, second) => "Both Ready!"));

//OR
var option2 = Rx.Observable.zip(ready(one), ready(two), 
                                (first, second) => "Both Ready!");

option1.take(1).subscribe(() => callback());
Run Code Online (Sandbox Code Playgroud)