У меня есть конвейер, который заканчивается 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')
.