在firebase中,对于每个" MATCH",我需要更新一个可以是正面或负面的COUNTER。在每次COUNTER更新时,我想更新一个FLAG,如果COUNTER> = 0则为1,否则为-1。 此FLAG位于另一个节点上。
目前,为了防止写入concurent,我使用云函数中的事务来更新COUNTER。
exports.updateMatchesStrengthInIds =
functions.database.ref('/data/ids/{idA}/MATCHES/{idB}/instances/{instanceID}/polarity').onWrite(event => {
const instanceRef = event.data.ref.parent;
const matchCounterRef = instanceRef.parent.parent.child('COUNTER');
const flagRef = matchCounterRef('FLAG');
const currentPolarity = event.data.val();
return matchCounterRef.transaction(current => {
var count = (current || 0) + currentPolarity;
return count;
}).then(() => {
console.log('COUNTER updated, but FLAG not yet updated');
});
});
这是有效的......
现在我仍然坚持这个问题:如何将FLAG同时更新为1或-1,具体取决于COUNTER是> = 0还是< 0。
似乎交易不允许同时在2个不同节点上进行更新? 在这种情况下,是否可以在返回的promise中传递我的计数器并更新标志呢?
我不熟悉JS和承诺......