【问题标题】:In firebase cloud function the child is self-deleting在firebase云功能中,孩子正在自我删除
【发布时间】:2021-11-11 17:24:43
【问题描述】:

当我在下面的函数中添加一个事务时,“guncelLig”的子节点会被自动删除。当我删除第二个事务时没有问题,它工作得很好。

此代码工作正常:

    for (let i = 0; i < users.length; i++) {
      const userID = users[i].id;
      database.ref().child("users").child("profilData").child(userID).child("guncelLig").transaction(function (value) {
        if (value > 1) {
          database.ref().child("users").child("profilData").child(userID).update({
            "lastUpdate": toSwiftDate(),
          });
          return value - 1; 
        }
    
        return value;
      });

}

但是当我将新部分添加到下面的代码中时,“guncelLig”会从 firebase 实时数据库中完全删除:

    for (let i = 0; i < users.length; i++) {
      const userID = users[i].id;

   database.ref().child("users").child("profilData").child(userID).child("guncelLig").transaction(function (value) {
        if (value > 1) {
          database.ref().child("users").child("profilData").child(userID).update({
            "lastUpdate": toSwiftDate(),
          });

          /// NEW CODE ERROR SOURCHE
database.ref().child("users").child("profilData").child(userID).child("EnYukselLig").transaction(function (EnYukselLig) {
            if (EnYukselLig > value - 1) {
              return value - 1;
            }
            return EnYukselLig;
          });

          return value - 1; // arttır
        }
        return value; /// ALWAYS RETURN NULL
      });
    }

我哪里做错了?请帮帮我

【问题讨论】:

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


    【解决方案1】:

    您应该将代码编写为async/await。使用await,您可以等待嵌套事务完成。

    for (let i = 0; i < users.length; i++) {
      const userID = users[i].id;
      database
        .ref()
        .child("users")
        .child("profilData")
        .child(userID)
        .child("guncelLig")
        .transaction(async (value) => {
          if (value > 1) {
            await database
              .ref()
              .child("users")
              .child("profilData")
              .child(userID)
              .update({
                lastUpdate: toSwiftDate(),
              });
    
            /// NEW CODE ERROR SOURCHE
            await database
              .ref()
              .child("users")
              .child("profilData")
              .child(userID)
              .child("EnYukselLig")
              .transaction(function (EnYukselLig) {
                if (EnYukselLig > value - 1) {
                  return value - 1;
                }
                return EnYukselLig;
              });
    
            return value - 1; // arttır
          }
          // No handler if the value is NULL
          return value; /// ALWAYS RETURN NULL
        });
    }
    

    如果value 已经是null,您也不会处理此案。

    不建议这样嵌套事务。事务本质上可以运行多次,并且无法保证它们会按预期完成,具体取决于同一位置发生的更新量。

    【讨论】:

      猜你喜欢
      • 2020-10-10
      • 2020-03-28
      • 2017-09-15
      • 2020-12-21
      • 2018-04-14
      • 1970-01-01
      • 1970-01-01
      • 2015-04-16
      • 2019-03-07
      相关资源
      最近更新 更多