[英]RXJS How to emit subscribtion only if another Observable is falsy
僅當其他可觀察對象為假時才需要發出訂閱。 示例代碼:
const loadingSubject$ = new BehaviorSubject<boolean>(false);
const valueSubject$ = new BehaviorSubject<string>('');
valueSubject$
.pipe(
// some conditions
)
.subscribe(
value => {
console.log(value);
}
);
valueSubject$.next('1') // '1'
valueSubject$.next('2') // '2'
loadingSubject$.next(true);
valueSubject$.next('3') // <nothing>
valueSubject$.next('4') // <nothing>
loadingSubject$.next(false);
valueSubject$.next('5') // '5'
更復雜的情況——在其他 observable 變為 falsy 后的某個超時期間也不會發出訂閱。 100ms
的示例代碼:
const loadingSubject$ = new BehaviorSubject<boolean>(false);
const valueSubject$ = new BehaviorSubject<string>('');
valueSubject$
.pipe(
// some conditions
)
.subscribe(
value => {
console.log(value);
}
);
valueSubject$.next('1') // '1'
valueSubject$.next('2') // '2'
loadingSubject$.next(true);
valueSubject$.next('3') // <nothing>
loadingSubject$.next(false);
valueSubject$.next('4') // <nothing>
setTimeout(() => {
valueSubject$.next('5') // '5'
}, 101);
valueSubject$
.pipe(
withLatestFrom(loadingSubject),
filter(([_, loading]) => !loading),
map(([v]) => v)
)
.subscribe(
value => {
console.log(value);
}
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.