Rx(RxJS)Url Builder

Rx(RxJS)Url Builder

问题描述:

我正在寻找一种使用RxJS构建urlStream的好方法,它使用多个参数。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参数的例子,但还没有看到使用多个输入流的例子。

如何:

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