【发布时间】:2017-05-14 08:50:17
【问题描述】:
我正在使用另一个 Observable 的输入过滤 Observable - 过滤的输入来自用户。
过滤是使用 RxJS 运算符 combineLatest 完成的。使用这意味着在订阅此流时,在两个源 Observables 都发出发射之前不会发射任何值 - 我希望创建的流在创建时发射(没有任何过滤),在任何用户输入发生之前。
我认为我应该使用startWith 运算符,以便流在创建时产生发射,但我不知道如何从 Observable 中播种。使用 Observable,因为数据来自 Firebase,并由 FirebaseListObservable's 处理。
下面是我目前正在做的拼凑版本。
let tagInput = document.getElementById('tags');
let tagExclusionStream = Observable
.fromEvent(tagInput, 'input')
.map((e: any) => createsArrayFromInput(e.target.value));
let allTags: Observable<any[]> = getAllTags();
let filteredTags = allTags
.combineLatest(tagExclusionStream, (tags, tagExclusions) => {
return tags.filter((tag: any) => tagExclusions.indexOf(tag.$key) == -1)
});
// I want this to print out without needing the tagExclusionStream to emit first
filteredTags.subscribe(tags => console.log("Tags:", tags))
如果我在这里的方法完全关闭/有更好的方法,因为我是 RxJS 的新手,请告诉我。
【问题讨论】: