我的应用程序中有一个使用baconjs库的商店。 此存储侦听我的身份验证令牌的更改。当登录用户更改时,我希望更新其他事件的侦听器以依赖此新令牌。
但是,每次我使用新用户登录时,旧订户都不会被处理掉。我该如何解决这个问题?
以下是一段代码:
token.onValue(token => {
add.onValue(task => {
fetch(...);
});
update.onValue(task => {
fetch(...);
});
});
请注意,对我来说,无论是否有人订阅任何observable都会执行提取,因为我想要这两个操作的推送语义。
答案 0 :(得分:4)
问题在于您在不使用组合器的情况下将token
与add
(以及update
)合并。在onValue
处理程序中添加订阅者是一种应该避免的反模式。
创建一个包含任务和当前令牌的流,并使用它来进行提取:
Bacon.combineTemplate({
task: add,
token: token
}).onValue(function(v) {
fetch(v.task, v.token);
})