0

现在我使用集群库的程序如下所示:

if(cluster.isMaster) {
  // here goes Rx subscriptions and workflows for the Master
} else if (cluster.isWorker){
 // here goes Rx subscriptions and workflows for a Worker
}

它看起来有点难看,我需要复制一些 Master 和 Worker 通用的代码。有没有办法以更“反应性”的风格重写它?

4

1 回答 1

1

将逻辑分解为“任务”或可重用的转换是一种很好的做法。然后,您可以将它们组合在一起以创建更复杂的数据转换管道,并针对不同情况进行定制。

function masterTransform( data$ ){
    return data$.map( extractData )
             .map( doSomething("master"))
             .map( anotherThing )
             .distinctUntilChanged()
             .scan( (a,b) => a + b, 0 );
}

function slaveTransform( data$ ){
    return data$.map( extractData )
             .map( doSomething("slave"))
             .flatMapLatest( combineOtherSource )
             .scan( (a,b) => Math.max(a,b), 0 );
}


let stream$ = cluster.isMaster 
               ? service.getMasterData().let( masterTransform )
               : service.getSlaveData().let( slaveTransform );

stream$.subscribe( data => console.log( data ));
于 2016-02-03T09:40:39.780 回答