我是否需要释放通过fromEvent运算符绑定的事件处理程序?

时间:2018-11-19 07:04:54

标签: rxjs

fromEvent(document, 'visibilitychange').subscribe(() => doSomething());

我想使用fromEvent运算符将事件绑定到文档,我想知道是否需要使用takeUntil删除/取消绑定处理程序或在销毁阶段取消订阅该处理程序。我开始了解到从DOM中删除了与事件处理程序绑定的元素时会释放事件处理程序,但是在这种情况下,由于我在document上绑定了事件处理程序,因此我想必须自己释放它,但是我不确定。任何见识将不胜感激!

1 个答案:

答案 0 :(得分:1)

据我所知,当从文档树中删除Dom节点时,相关事件将被删除,但是由于该事件是通过使用rxjs fromEvent绑定的,因此您仍然需要取消订阅以防止内存泄漏。

关于文档节点,通过查看fromEvent的源代码,它将在您取消订阅后为您调用removeEventListener。同样,当您不再需要取消订阅时,您将需要调用它。

function setupSubscription(sourceObj, eventName, handler, subscriber, options) {
    let unsubscribe;
    if (isEventTarget(sourceObj)) {
        const source = sourceObj;
        sourceObj.addEventListener(eventName, handler, options);
        unsubscribe = () => source.removeEventListener(eventName, handler, options);
    }