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);
您的意思是那些为模板文字而不是字符串? – loganfsmyth
是很好的抓住。 – paulpdaniels