Сделайте так, чтобы takeUntil сначала инициировал удаление обработчиков из fromEvent первым - PullRequest
0 голосов
/ 11 мая 2019

У меня есть конвейер, который заканчивается takeUntil, проблема в том, что switchMap срабатывает, потому что combineLatest не отменяется до tap s внутри takeUntil end.

Мой псевдокод:

combineLatest(
    fromEventPattern(handler => {
        document.addEventListener('disconnect', handler, false);
        console.log('added');
    },
    handler => {
        document.removeEventListener('disconnect', handler, false);
        console.log('removed');
    }
).pipe(
    switchMap(() => { 
        console.log('SWITCH MAP TRIGGERED!');
        return EMPTY;
    ]),
    takeUntil(
        mySubject.pipe(
            filter(type => type === 'LOGOUT'),
            tap(() => console.log('got logout, so do logout calls'),
            tap(() => document.dispatchEvent(new CustomEvent('disconnect')))
        )
    )
)

Запустить отмену с помощью:

mySubject.next({ type: 'LOGOUT' });

Проблема, с которой я столкнулся, заключается в том, что она не удаляет прослушиватели событий до тех пор, пока не закончится tap s в takeUntil.Из-за этого отправка события "disconnect" вызывает повторное срабатывание switchMap.Я хочу, чтобы все было отменено немедленно, когда filter в takeUntil выполнено, и тогда оно должно выполнить это последнее действие dispatchEvent('disconnect').

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...