【问题标题】:RxJs Return old value when when filter return false当过滤器返回 false 时,RxJs 返回旧值
【发布时间】:2019-08-12 15:46:39
【问题描述】:

此代码的主要目的是检查存储中是否存在值并防止对服务器的额外请求。整个逻辑工作正常,但不幸的是,当过滤器返回 false 时,选择器不会应用于 observable 并且即使值在存储中,数组也是空的。

  this.events$ = this.paginationService.page$.pipe(
      switchMap(pageIndex => this.store.pipe(
        delay(0),

        //get objects from store
        select(selectEventsPageByGenre(this.musicGenre, { pageIndex: pageIndex, pageSize: 3 })),

        //if there are no objects from select() the dispatch server request
        filter(events => events.length === 0),
        map(() => {
          this.store.dispatch(new EventsPageRequested({
            musicGenre: MusicGenre[this.musicGenre.toUpperCase()],
            page: {
              pageIndex: pageIndex,
              pageSize: 6
            }
          }));

          return [];
        })
      ))
    );

过滤器返回false时如何从选择器返回值(如果数组不为空)?

提前致谢

【问题讨论】:

    标签: angular rxjs ngrx ngrx-store


    【解决方案1】:

    只需删除filter(),并将map() 替换为

        map(() => {
          if (events.length > 0) {
            return events;
          }
          this.store.dispatch(new EventsPageRequested({
            musicGenre: MusicGenre[this.musicGenre.toUpperCase()],
            page: {
              pageIndex: pageIndex,
              pageSize: 6
            }
          }));
    
          return [];
        })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      • 2014-02-21
      • 2017-01-04
      • 1970-01-01
      • 2011-05-22
      • 2017-12-15
      • 2021-06-02
      相关资源
      最近更新 更多