避免 baconjs 订阅中的内存泄漏
Avoid memory leak in subscription for baconjs
我的应用程序中有一个商店使用 baconjs 库。
这家商店监听我的身份验证令牌的变化。随着登录用户的更改,我想更新其他事件的侦听器以依赖这个新令牌。
但是,每次我用新用户登录时,旧订阅者都不会被处理掉。我将如何解决这个问题?
这是一段代码:
token.onValue(token => {
add.onValue(task => {
fetch(...);
});
update.onValue(task => {
fetch(...);
});
});
请注意,无论任何人订阅任何可观察对象,始终执行提取对我来说很重要,因为我想要这两个操作的推送语义。
问题是您在不使用组合器的情况下将 token
与 add
(以及 update
)组合。在 onValue
处理程序中添加订阅者是一种应该避免的反模式。
创建一个包含任务和当前令牌的流,并使用它来进行抓取:
Bacon.combineTemplate({
task: add,
token: token
}).onValue(function(v) {
fetch(v.task, v.token);
})
我的应用程序中有一个商店使用 baconjs 库。 这家商店监听我的身份验证令牌的变化。随着登录用户的更改,我想更新其他事件的侦听器以依赖这个新令牌。
但是,每次我用新用户登录时,旧订阅者都不会被处理掉。我将如何解决这个问题?
这是一段代码:
token.onValue(token => {
add.onValue(task => {
fetch(...);
});
update.onValue(task => {
fetch(...);
});
});
请注意,无论任何人订阅任何可观察对象,始终执行提取对我来说很重要,因为我想要这两个操作的推送语义。
问题是您在不使用组合器的情况下将 token
与 add
(以及 update
)组合。在 onValue
处理程序中添加订阅者是一种应该避免的反模式。
创建一个包含任务和当前令牌的流,并使用它来进行抓取:
Bacon.combineTemplate({
task: add,
token: token
}).onValue(function(v) {
fetch(v.task, v.token);
})