Есть ли оператор для отмены предыдущего выполнения? - PullRequest
0 голосов
/ 01 февраля 2019

Я понимаю, что название странно сформулировано, но здесь оно идет.

Я подписываюсь на наблюдаемую filteredBooks$, которая запускается значениями, испускаемыми наблюдаемой this._bookFilter$.Однако преобразование несколько дорого, и поэтому я хотел бы отменить все текущие выполнения switchMap в случае, если из this._bookFilter$ выдается новое значение.

Как мне этого добиться?

  filteredBooks$: Observable<Book[]> = this._bookFilter$.pipe(
    debounceTime(50),
    distinctUntilChanged((f1, f2) => this.filtersAreDistinct(f1, f2)),
    // IF A NEW MESSAGE (bookFilter emission) COMES I WANT TO INTERRUPT THE EXPENSIVE EXECUTION BELOW  
    switchMap(
      bookFilter => findBooksByCategories$(bookFilter.categories),
      scan<Book[], Book[]>((filteredAndSortedResult, chunkOfBooksInCategories) => {
          const filteredAndScoredChunk = [];
          chunkOfBooksInCategory.forEach(bookToScore => {
            const score = bookToScore.getSearchScore().calculateBookScoreByFilter(bookFilter);
            if (score !== 0) {
              filteredAndScoredChunk.push(bookToScore);
            }
          });
          return filteredAndSortedResult.concat(filteredAndScoredChunk).sort(this.bookSortCompare);
        } , []));
      }
    ),
    shareReplay(1)
  );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...