【发布时间】:2016-06-29 09:54:25
【问题描述】:
我有一个 Meteor ReactiveVar,它被用作数据存储中的更新触发器。然而,每次设置响应变量时,跟踪器都不会运行。
似乎有时当状态快速连续设置时,跟踪器不运行。
这是我商店的代码:
const myStore = {
states = {
...
},
updateTrigger = new ReactiveVar({ name: null, timeStamp: null }),
setState({ name, value }) {
this.states[name] = value;
console.log('Set State', name);
this.updateTrigger.set({ name, timeStamp: new Date().getTime() });
},
};
还有追踪器:
Tracker.autorun(() => {
const updateTrigger = myStore.updateTrigger.get();
console.log('Tracker', updateTrigger.name);
if (updateTrigger.name === state-two) myFunction();
});
控制台记录以下内容:
'Set State state-one' // update state-one
'Tracker state-one'
'Set State state-two' // update state-two
'Set State state-one' // update state-one
'Tracker state-one'
'Set State state-three' // update state-three
'Tracker state-three'
'Set State state-one' // update state-one
'Set State state-two' // update state-two
'Set State state-three' // update state-three
'Tracker state-three'
我不明白为什么会这样。
这似乎是一种竞争条件,因为它不分青红皂白地记录哪些更新,哪些不记录。
状态更新非常频繁(状态一个每 1.5 秒一次,然后其他状态大约每秒一次)。
欢迎提出任何关于问题所在或其他方法的建议。
我可以使用 PubSub 包。一般来说,我不是Tracker 和ReactiveVar 的忠实粉丝,但我不确定这里的最佳做法是什么,我不想在某些地方使用Tracker+ReactiveVar 和PubSub其他人。
将每个单独的状态作为ReactiveVar 不是一种选择,因为我需要在更新时将状态持久化到数据库中。
【问题讨论】:
-
您是否设法找出导致问题的原因?如果没有,您能否提供最小限度的复制,以便该问题对社区具有更大的价值?就目前而言,它是未解决且不可重现的。
标签: javascript meteor publish-subscribe meteor-tracker