Я понимаю, что название странно сформулировано, но здесь оно идет.
Я подписываюсь на наблюдаемую 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)
);