我对 rxjs 很陌生,我想出的这个例子并不那么优雅。本质上,我怎样才能将 3 个截然不同的可观察对象组合成一个?你真的可以像许多在线示例那样以高阶函数的方式来做吗?
createFilteredDataObservable(initialData: Observable<Data[]>,
valueSource: Observable<any>,
clickSource: Subject<boolean>): Observable<Data[]> {
let data: Data[] = [];
let text = '';
initialData.subscribe(value => {
data= value;
});
function format(x: string): string {
return x.toLowerCase().trim();
}
function filter() {
if (text === '') {
return data;
}
const result = data.filter(d=> {
const name = format(d.DisplayName);
return name === text || name.includes(text);
});
return result;
}
return new Observable<Data[]>((observer) => {
clickSource.subscribe(_ => {
const result = filter();
observer.next(result);
});
valueSource.subscribe((v: string|Data) => {
if (typeof v !== 'string') {
return;
}
text = format(v);
const result = filter();
observer.next(result);
});
});
}