在订阅baconjs时避免内存泄漏

时间:2015-06-15 17:26:21

标签: javascript push observable bacon.js

我的应用程序中有一个使用baconjs库的商店。 此存储侦听我的身份验证令牌的更改。当登录用户更改时,我希望更新其他事件的侦听器以依赖此新令牌。

但是,每次我使用新用户登录时,旧订户都不会被处理掉。我该如何解决这个问题?

以下是一段代码:

token.onValue(token => {
    add.onValue(task => {
        fetch(...);
    });

    update.onValue(task => {
        fetch(...);
    });
});

请注意,对我来说,无论是否有人订阅任何observable都会执行提取,因为我想要这两个操作的推送语义。

1 个答案:

答案 0 :(得分:4)

问题在于您在不使用组合器的情况下将tokenadd(以及update)合并。在onValue处理程序中添加订阅者是一种应该避免的反模式。

创建一个包含任务和当前令牌的流,并使用它来进行提取:

Bacon.combineTemplate({
  task: add,
  token: token
}).onValue(function(v) {
  fetch(v.task, v.token);
})