2016-02-02 80 views
0

現在我的程序,其採用集羣LIB是這樣的:RxJS和主/工人的工作流程

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 
} 

這看起來有點醜,我需要複製一些代碼,是很常見的主服務器和工人。有沒有辦法以更「反應性」的風格來重寫它?

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