2016-02-02 3 views
0

Теперь моя программа, которая использует кластер LIB выглядит следующим образом:RxJS и Master/Рабочий рабочий процесс

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)); 
Смежные вопросы