Firebase交易多次更新

时间:2018-06-05 16:01:01

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

我正在尝试在我的应用程序中创建用户评级系统,其中一个用户可以评价具有1-5星评级的另一个用户以及他们的体验描述。我遇到平均评级系统的问题,因为我的交易每个文档一次只能更新一个表。也许我会采用错误的方式,并可以使用一些建议或帮助。

计数字段可靠地更新,它将在我的测试中增加。它得到的平均评级正确计算不起作用。我想因为我试图在一个函数中做两个事务。

分贝:

"reputation" : {
    "userID123" : {
      "-LDXRfZPscamLvjDUbXb" : {
        "ratingUserID2" : {
          "rating" : 3,
          "description" : "You are awesome!"
        }
      },
      "asdfsdfsdf3333" : {
        "ratingUserID3" : {
          "rating" : 4,
          "description" : "Great work."
        }
      }
      "count" : 2,
      "rating" : 3.5
    }
  },
...other data...

firebase功能:

exports.calculateReputation = functions.database.ref('/reputation/{userID}/{uniqueID}').onCreate((snap, context) => {
    const data = snap.val();
    const rating = data[Object.keys(data)].rating;

    snap.ref.parent.child('/count').transaction((currentCount) => {
        return currentCount + 1;
    }, (error, committed, snapshot) => {
        if (error) {
            console.log('Transaction failed abnormally!', error);
        } else if (!committed) {
            console.log('We aborted the transaction (because ada already exists).');
        } else {
            console.log('added!');
            console.log('ADD RATING:', rating);
        }
        var count = snapshot.val();
        console.log('COUNT:', count);
        snap.ref.parent.child('/rating').transaction((currentRating) => {
            var newRating = Math.round( ((rating + currentRating) / count) * 10 ) / 10;
            return newRating;
        });
    });
});

0 个答案:

没有答案