2016-09-26 2 views
1

Я новичок в Rxjs. Я хочу, если возможно, следовать лучшим методам.Карта трех различных функций, наблюдаемых в Node.js

Я пытаюсь выполнить три различные функции по тем же данным, которые возвращаются в наблюдаемом. Следуя концепции «потоки данных», я продолжаю думать, что мне нужно разделить этот Observable на три потока и продолжить.

Вот мой код, так что я могу прекратить говорить отвлеченно:

// NotEmptyResponse splits the stream in 2 to account based on whether I get an empty observable back. 
let base_subscription = RxNode.fromStream(siteStream).partition(NotEmptyResponse); 

// Success Stream to perform further actions upon. 
let successStream = base_subscription[0]; 

// The Empty stream for error reporting 
let failureStream = base_subscription[1]; 

//Code works up until this point. I don't know how to split to 3 different streams. 
successStream.filter(isSite) 
      .map(grabData)// Async action that returns data 
      /*** Perform 3 separate actions upon data that .map(grabData) returned **/ 
      .subscribe(); 

Как я могу разделить этот поток данных на три, и отображать каждый экземпляр данных для другой функции?

+0

Что вы подразумеваете под _ "сопоставить каждый экземпляр данных с другой функцией" _? Вы хотите разделить 'siteStream' на три наблюдаемых вместо двух? – martin

ответ

1

Фактически partition() оператор внутри только calls filter() operator twice. Сначала создайте Observable из значений, соответствующих predicate, а затем для значений, не соответствующих predicate.

Таким образом, вы можете сделать то же самое с filter() operator:

let obs1 = base_subscription.filter(val => predicate1); 
let obs2 = base_subscription.filter(val => predicate2); 
let obs3 = base_subscription.filter(val => predicate3); 

Теперь у вас есть три наблюдаемые, каждый из которых излучающего только некоторых конкретных значений. После этого вы можете продолжить с существующим кодом:

obs2.filter(isSite) 
    .map(grabData) 
    .subscribe(); 

Просто следует помнить, что вызов subscribe() запускает значения генерации от источника наблюдаемого. Это не обязательно должно быть так, в зависимости от того, что вы используете. См. “Hot” and “Cold” Observables в документации. Operator connect() может быть полезно вам в зависимости от вашего пользователя.

+0

Я медленно понял это прошлой ночью, но вы подтвердили мои подозрения. Я проверю подключение оператора. Цените помощь. – calbear47

Смежные вопросы