我正在使用另一个 Observable
的输入过滤 Observable
- 过滤的输入来自用户 .
使用RxJS运算符 combineLatest
完成过滤 . 使用这意味着当订阅此流时,在两个源Observable都发出之前不会发出任何值 - 我希望在创建任何用户输入之前创建的流(无需任何过滤) .
我想我应该使用startWith运算符,因此流在创建时有一个发射,但我无法弄清楚如何从Observable中播种 . 使用Observable是因为数据来自Firebase并且使用 FirebaseListObservable
进行处理 .
下面是我目前正在做的拼凑版本 .
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的新手 .
1 回答
我认为这样可以解决问题:
或者,如果您在不同的地方使用
tagExclusionStream
,则可以执行以下操作: