首页 > 解决方案 > 事务中的 Firebase 函数 admin.database() 空参数

问题描述

我正在使用带有“Spark 计划”(免费)的 Firebase 功能。这是我的功能的一部分:

return query.once("value").then(function(snapshot) {
snapshot.forEach(function(childSnapshot) {
  var childData = childSnapshot.val();
  if (childData.displayName === ally) {
    existAlly = true;
    console.log('uid: '+uid)
    var ref = admin.database().ref('users/'+uid).transaction(function (current_value) {
      console.log('current_value: '+uid)
      current_value.mainAlly = ally;
      current_value.coins = (current_value.coins || 0) + 10
      return current_value;
    }).then(() => {
      console.log('New Ally added');
      return true;
    });
...

这里的日志,你可以看到“'current_value: null'

Firebase 函数日志

但是,你可以在下一张图片中看到,“ref”是正确的:

Firebase 数据库

那么,是计费问题吗?一段时间后“admin.database()”停止工作?或者是别的什么?

谢谢!


编辑:我刚刚做了另一个测试,现在错误出现在“硬币”中,代码​​相同:

在此处输入图像描述

标签: javascriptfirebasefirebase-realtime-databasegoogle-cloud-functionsfirebase-admin

解决方案


一切都按预期工作。处理事务时,您可以预期您的处理函数将在第一次被调用时使用 null(您必须检查它),然后再次使用数据库的实际内容。您应该查看文档,并特别注意以下说明:

事务函数被多次调用

您的事务处理程序被多次调用,并且必须能够处理空数据。即使您的数据库中存在现有数据,在运行事务功能时也可能不会在本地缓存。


推荐阅读