我想要一个初始化函数来控制我的代码初始化过程以提高可读性-一种路线图。
interface{}
我可以这样做而无需在myObservable$;
init() {
this.watchChanges()
this.updateOptionsOnChange()
this.patchValuesOnOptionUpdate();
}
watchChanges () {
myObservable$ = this.something.pipe(
mergeMap(change => hitApi)
)
}
updateOptionsOnChange() {
//here I want to "Add" a pipe to the existing pipes above
myObservable$.pipe(
tap(add values to an object/array)
)
}
this.patchValuesOnChanges() {
myObservable$.subscribe(
set values based on above tap ^
)
};
中进行其他观察。这只是一个反模式吗?
答案 0 :(得分:1)
您可以执行myObservable$ = myObservable$.pipe(tap(add values to an object/array))
。无法像您描述的那样“就地”更改现有Observable的管道。
然后在patchValuesOnChanges
中将两个不同的Observables组合在一起可能会更“主动”,其中一个Observables来自updateOptionsOnChange
。
答案 1 :(得分:0)
在BehaviorSubject上使用switchMap来切换要使用的可观察女巫。
const { BehaviorSubject, interval } = rxjs;
const { switchMap, map } = rxjs.operators;
let useApi$ = new BehaviorSubject(false);
let switchButton = document.getElementById('switch');
switchButton.addEventListener('click', () => {
if (useApi$.value) {
switchButton.innerText = 'Local';
useApi$.next(false);
} else {
switchButton.innerText = 'API';
useApi$.next(true);
}
});
let local$ = interval(1000).pipe(map(_ => 'local'));
let api$ = interval(1000).pipe(map(_ => 'api'));
let myObservable$ = useApi$.pipe(
switchMap(useApi => useApi ? api$ : local$)
);
myObservable$.subscribe(val => { console.log(val); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.3/rxjs.umd.min.js"></script>
<button id="switch">Local</button>