Пропустить / игнорировать наблюдаемую подписку на событие при определенном условии

#javascript #angular #typescript #rxjs

#javascript #угловой #typescript #rxjs

Вопрос:

Я хотел бы пропустить / игнорировать подписку на FromEvent(), наблюдаемую, когда условие истинно: когда this.currentPosition === this.vc.getScrollPosition()[1] я не хочу подписываться на наблюдаемое, потому что оно прокручивается непосредственно к следующим элементам, и моя цель — дождаться, пока пользовательское взаимодействие перейдет к следующему элементу в моем интерфейсе..

 fromEvent(window, 'scroll').pipe(
    distinctUntilChanged(),
    debounceTime(1000)
)
    .subscribe(
        (event) => {

            const current = this.positions.find(e => e.name === this.currentSectionName);
            const indexOfCurrent = this.positions.indexOf(current);

            if (indexOfCurrent   1 === this.positions.length) {
                // stay in the same position if it's the last item
                this.vc.scrollToPosition([0, current.position]);
                this.currentPosition = current.position;

            } else {
                // move to next position if it's not the last item
                const next = this.positions[indexOfCurrent   1];
                this.vc.scrollToPosition([0, next.position]);
                this.currentPosition = next.position;
            }
        }

    );
 

Ответ №1:

Вы можете отфильтровать его в канале.

 fromEvent(window, 'scroll').pipe(
    filter( () => this.currentPosition !== this.vc.getScrollPosition()[1] ),
    distinctUntilChanged(),
    debounceTime(1000)
)