Node.js nodeJs中的Firebase事务

Node.js nodeJs中的Firebase事务,node.js,firebase,firebase-realtime-database,google-cloud-functions,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

我试图实现的只是通过事务增加数据库中的值。这对我来说就像预期的那样,但我总是在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);
 });
在这两种情况下,代码都在做它应该做的事情,但我仍然收到所说的错误。

这是您应该如何实现事务的,这样函数总是会返回一个承诺:

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;
  })
});

你应该能够直接归还承诺。请编辑您的问题,以便在尝试时显示整个代码示例。我编辑了我的帖子。实际上,当我尝试直接返回承诺时,我遇到了另一个错误,但这似乎有所不同。你说的“似乎有所不同”是什么意思?我有时会得到“返回的函数未定义,预期的承诺或值”,有时会得到“错误序列化返回值:类型错误:将循环结构转换为JSON”,我仍然会得到“序列化返回值时出错:TypeError:将循环结构转换为JSON”。我想这与以下事实有关:在Firebase中调用事务的次数超过了一次。