【问题标题】:RXJS Repeat latest Value of Observable on Emitted Value of another ObservableRXJS 在另一个 Observable 的 Emitted Value 上重复 Observable 的最新值
【发布时间】: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


    【解决方案1】:

    您可以尝试使用 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]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-23
      • 1970-01-01
      • 1970-01-01
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多