ReactiveVar
データストアで更新トリガーとして使用されるMeteorがあります。ただし、リアクティブ変数が設定されるたびにトラッカーが実行されるわけではありません。
状態が立て続けに設定されると、トラッカーが実行されないことがあるようです。
これは私の店のコードです:
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 秒ごとに 1 回、その後は約 1 秒ごとに更新されます)。
何がうまくいかないのか、または他のアプローチについての提案は歓迎します。
PubSub パッケージを使用できます。Tracker
一般に、私はandの大ファンではありませんが、ここでのベスト プラクティスが何であるかはわかりません。また、 +ReactiveVar
を使用したくない場所もあれば、PubSub を使用したくない場所もあります。Tracker
ReactiveVar
ReactiveVar
更新時に状態をデータベースに永続化する必要があるため、個々の状態をオプションとして持つことはできません。