使takeUntil首先触发fromEvent的删除处理程序

时间:2019-05-11 17:21:30

标签: rxjs

我有一个以takeUntil结尾的管道,问题是switchMap被触发,因为combineLatest直到tap内的takeUntil才被取消。 / p>

我的伪代码:

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中的takeUntil秒之后才删除事件监听器。因此,"disconnect"事件的分派正在触发switchMap再次触发。我希望事情在filter中的takeUntil被取消时立即取消,然后它应该执行dispatchEvent('disconnect')的最终动作。

0 个答案:

没有答案