簡體   English   中英

RXJS 如何僅在另一個 Observable 為假時發出訂閱

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM