RxJS 和主/工作线程工作流

RxJS and Master/Worker workflow

本文关键字:线程 工作流 工作 和主 RxJS      更新时间:2023-09-26

现在我的程序使用集群库看起来像这样:

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
}

它看起来有点丑,我需要复制一些对主节点和 worker 都很常见的代码。有没有办法以更"反应式"的风格重写它?

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

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 ));