![](/img/trans.png)
[英]Javascript rxjs - do something when last value emitted from observable
[英]RXJS Repeat latest Value of Observable on Emitted Value of another Observable
我目前正在為以下問題尋找更簡單的解決方案:
一旦應用程序發出一個真實的就緒 state,我想重復一個 observable 的最新值。 有沒有更簡單的方法,而無需像以下解決方案中使用 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();
}
您可以嘗試使用 withLatestFrom 運算符。
private repeatWhenReady<T>(obs: Observable<T>): Observable<T> {
return this.store.select(state => state.ready)
.pipe(
first(ready => !!ready), // filter your ready value with true
withLatestFrom(obs), // take last value of your observable
map(([first, second]) => { // map observable pipe to second value
return second;
})
);
}
你可以在這里訪問。
[https://www.learnrxjs.io/learn-rxjs/operators/combination/withlatestfrom][1]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.