Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 当过滤器返回false时,RxJs返回旧值_Angular_Rxjs_Ngrx_Ngrx Store - Fatal编程技术网

Angular 当过滤器返回false时,RxJs返回旧值

Angular 当过滤器返回false时,RxJs返回旧值,angular,rxjs,ngrx,ngrx-store,Angular,Rxjs,Ngrx,Ngrx Store,此代码的主要目的是检查存储区中是否存在值,并防止向服务器发出额外请求。整个逻辑工作正常,但不幸的是,当过滤器返回false时,选择器并没有应用于observable,数组为空,即使存储了值 this.events$ = this.paginationService.page$.pipe( switchMap(pageIndex => this.store.pipe( delay(0), //get objects from store

此代码的主要目的是检查存储区中是否存在值,并防止向服务器发出额外请求。整个逻辑工作正常,但不幸的是,当过滤器返回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时,如何从选择器返回值

提前感谢

只需移除过滤器,并用

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

      return [];
    })