使用firebase云功能中的事务同时更新2个不同的节点

时间:2017-09-19 14:09:28

标签: javascript firebase firebase-realtime-database google-cloud-functions

在firebase中,对于每个" MATCH",我需要更新一个可以是正面或负面的COUNTER。在每次COUNTER更新时,我想更新一个FLAG,如果COUNTER> = 0则为1,否则为-1。 此FLAG位于另一个节点上。

  • 匹配
    • -KtzhbMRLB36qgiIz0hT
      • COUNTER:1211
      • 旗帜:1
    • -KtzhbMRLB36qgiIz0hU
      • COUNTER:-124
      • FLAG:-1

目前,为了防止写入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和承诺......

0 个答案:

没有答案