【发布时间】:2021-08-07 06:37:31
【问题描述】:
我目前正在为以下问题寻找更简单的解决方案:
我想在应用程序发出真正的就绪状态后立即重复可观察对象的最新值。有没有更简单的方法,而无需像以下使用 rxjs 运算符的解决方案那样创建额外的临时主题?我无法与这些创建有效的组合。
当前没有 rxjs 操作符的解决方案:
private repeatWhenReady<T>(obs: Observable<T>): Observable<T> {
// store.select returns the observable of the ready State
const readyObs = this.store.select(state => state.ready).pipe(first(ready => ready=== true));
const resultSubject = new Subject<T>();
let lastValue: T;
let lastValueSet = false;
let ready = false;
const complete = () => resultSubject.complete();
obs.subscribe((value) => {
if (!ready) {
lastValue = value;
lastValueSet = true;
} else {
resultSubject.next(value);
}
}, complete, complete);
readyObs.subscribe(() => {
ready = true;
if (lastValueSet) {
resultSubject.next(lastValue);
}
});
return resultSubject.asObservable();
}
【问题讨论】:
标签: javascript typescript rxjs ngrx