rxfire 订阅未在 componentdidmount 中触发

rxfire subscription not firing in componentdidmount

我正在使用 rxfire 在 componentdidmount 中合并来自 firestore 的数据:

store$.pipe(
      withLatestFrom(items$),  
      map(([store, items]) => ({ items, ...store })),    
    ).pipe(   
      withLatestFrom(categories$),       
      map(([store, categories]) => ({ categories, ...store })),
    ).subscribe(store => {      
      this.setState({ store: store, isLoading: false });
    })   

此代码的问题是未触发且屏幕卡在加载组件上。如果我第二次加载屏幕,它就会工作。难道我做错了什么?我该如何解决

如果它在您重新加载之前无法正常工作,则可能是基于 items$categories$ 何时发出它们自己的值的时间问题。

一种更安全的组合这些可观察量的方法是使用 RxJS 的 combineLatest() 特性。它接受一个 observable 数组,并且在从 every observable.

接收到一个值之前不会发出
combineLatest([store$, items$, categories$]).pipe(
  map(([store, items, categories])=>({...store, ...items, ...categories})),
  tap(store=>this.setState({ store, isLoading: false })
).subscribe();

请记住 combineLatest() 如果数组中的任何可观察对象不发出值,那么 combineLatest() 将永远不会发出值。