Angular 获取多个 api 并从组合最新或 fork join 运算符中的选择器获取

问题描述 投票:0回答:1

问题是多次触发订阅方法需要避免这样的事情。

有了这个,所有三个选择器在初始时间结合最新调用一次。但是,问题是下次如果它触发组合最新的订阅方法,它会触发 3 次而不是 1 次。

我尝试在 fork Join 的帮助下没有帮助,甚至订阅也不会用 fork Join 触发

请建议哪个 rxjs 操作员可以帮助并获得此案例

enter image description here

 const volumeAccSub = this.store
        .select(fromSelectors.getVolumeAccContent)
        .pipe(filter(data => !!data));

    const volumeMaxSub = this.store
        .select(fromSelectors.getVolumeMaxContent)
        .pipe(filter(data => !!data));

    const flowRateAccSub = this.store
        .select(fromSelectors.getFlowRateAccContent)
        .pipe(filter(data => !!data));

    const mergedContentOps = combineLatest([
        flowRateAccSub,
        volumeAccSub,
        volumeMaxSub,
    ]).pipe(delay(2000)).subscribe(val => {
        this.formatContentReceived(val);
    });

请建议哪个 rxjs 操作员可以帮助并获得此案例

谢谢提前

javascript angular rxjs ngrx
1个回答
0
投票

我看到您正在使用 ngrx 并且您正在尝试监听同一状态的 3 个选择器。

在这种情况下,最好的解决方案是创建一个选择器,将 3 个选择器结合起来,并在一次发射中返回您需要的数据,这样您就可以只订阅一个可观察量。

来自 ngrx 文档的示例

export const selectUser = (state: AppState) => state.selectedUser;
export const selectAllBooks = (state: AppState) => state.allBooks;
 
export const selectVisibleBooks = createSelector(
  selectUser,
  selectAllBooks,
  (selectedUser: User, allBooks: Book[]) => {
    if (selectedUser && allBooks) {
      return allBooks.filter((book: Book) => book.userId === selectedUser.id);
    } else {
      return allBooks;
    }
  }
);
© www.soinside.com 2019 - 2024. All rights reserved.