现在我使用集群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的代码。有没有办法以更“反应”的方式重写它?
答案 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 ));