NodeJs中的Firebase交易

时间:2018-06-30 19:33:54

标签: node.js firebase firebase-realtime-database google-cloud-functions

我试图实现的只是通过事务增加数据库中的值。这按预期对我有用,但我的Firebase控制台总是出现以下错误:

Function returned undefined, expected Promise or value

我当前的通话如下:

exports.reportCounter = functions.database.ref('/user/{userId}/reports/{initiatorId}').onWrite((change,context) => {
const userId = context.params.userId;

return userRef.child(userId).child("numReports").transaction(function(numReports) {
    return change.after.exists()?((numReports || 0) + 1):(numReports - 1);
})
});

我还尝试过直接退还诺言:

return userRef.child(userId).child("numToIncrement").transaction(function(numToIncrement) {
            return ((numToIncrement || 0) + 1);
 });

在两种情况下,代码都按预期方式运行,但我仍然收到上述错误。 enter image description here

1 个答案:

答案 0 :(得分:0)

这是您应该如何实现事务的方法,因此该函数始终返回promise:

exports.reportCounter = functions.database.ref('/user/{userId}/reports/{initiatorId}').onWrite((change, context) => {
  const userId = context.params.userId;
  let increment;
  if (change.after.exists() && !change.before.exists()) {
    increment = 1;
  } else if (!change.after.exists() && change.before.exists()) {
    increment = -1;
  }
  return userRef.child(userId).child("numReports").transaction(function(numReports) {
    return (numReports || 0) + increment;
  })
});