2015-10-14 3 views
1

Я ищу хороший способ создания urlStream с использованием RxJS, который принимает несколько параметров.Rx (RxJS) Url Builder

var searchStream = new Rx.ReplaySubject(1); 
var pageStream = new Rx.ReplaySubject(1); 

var urlStream = new Rx.Observable.create((observer) => { 
    //What goes here? 
    //Should output something like http://apiurl.com?page=page&search=search 
}); 

Мой инстинкт использовать Rx.Observable.merge(searchStream, pageStream);, но после того, как вы делаете, что вы не знаете, какой из них какой параметр.

С помощью темы searchStream я могу использовать объект в нескольких местах в приложении до searchStream.onNext("my search") и заставить его вызвать ответные данные. Я видел много примеров, которые используют один параметр url, но еще не видели пример, который использует несколько входных потоков.

ответ

2

Как насчет:

var searchStream = ... 
var pageStream = ... 

var urlStream = Rx.Observable.combineLatest(searchStream, pageStream, (search, page) => { 
    return baseUrl + `?search=${search}&page=${page}`; 
}) 
.shareReplay(1); 

Я хотел бы предложить вам не использовать Subject сек непосредственно при создании потоков. Вероятно, все, что вызывает изменение параметра, можно так же легко обернуть в Observable.

Например ваш поиск, вероятно, будет присоединен к некоторому текстовому полю, чье изменение событие может быть завернута в fromEvent

//This would create a stream that waits until the user has stopped 
//typing for half a second before sending a request to update. 
var searchStream = Rx.Observable.fromEvent($textbox, 'keyup') 
    .map(e => e.target.value) 
    .debounce(500); 
+1

вы имели в виду те, что шаблон литералы вместо строки? – loganfsmyth

+0

Да хороший улов. – paulpdaniels

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