RxJS和主/工作流程

时间:2016-02-02 14:24:51

标签: javascript node.js rxjs reactive-programming node-cluster

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

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的代码。有没有办法以更“反应”的方式重写它?

1 个答案:

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