【问题标题】:Conditional Statements in Firebase Cloud FunctionsFirebase 云函数中的条件语句
【发布时间】:2021-02-07 06:21:58
【问题描述】:

我的应用中有两种类型的用户。我希望通过 firebase firestore 和实时数据库在线检测他们的存在。但是,当我部署它时,只执行 user1 条件语句。

//这里是云函数

 exports.onUserStatusChange = functions.database
  .ref("/{uid}/presence")
  .onUpdate(async (change, context) => {
    // Get the data written to Realtime Database
    const isOnline = change.after.val();

    // Get a User1 reference to the Firestore document
    const user1StatusFirestoreRef = firestore.doc(`user1_data/${context.params.uid}`);
    // Get a  User2 reference to the Firestore document
    const user2StatusFirestoreRef = firestore.doc(`user2_data/${context.params.uid}`);

    console.log(`status: ${isOnline}`);


    //   // Update the values on Firestore

    if (user1StatusFirestoreRef) {
      return user1StatusFirestoreRef.update(
        {
          presence: isOnline,
          last_seen: Date.now(),
        }


      );

    }

    if (user2StatusFirestoreRef) {
      return user2StatusFirestoreRef.update(
        {
          presence: isOnline,
          last_seen: Date.now(),
        }


      );

    }








  });

【问题讨论】:

  • 给定用户能否同时满足这两个条件?如果是这样,您想更新 Firestore 中的两个位置吗?
  • 给定用户不能同时满足这两个条件。应用程序中有两类用户。我想要一种情况,如果任一用户类别打开应用程序,适当的条件会触发所需的功能。目前只有第一个条件有效。
  • 在这种情况下,您应该首先获取引用的内容。即使数据库中的基础位置没有值,条件 user1 的引用变量也将始终具有值。请通读 firebase 文档以了解创建参考变量和获取基础数据之间的区别。检查此文档firebase.google.com/docs/reference/node/…
  • 谢谢。这个方法对我有用:return promise.all([ condition1, condition2]);
  • 届时将给出正确答案。

标签: firebase firebase-realtime-database google-cloud-firestore google-cloud-functions


【解决方案1】:

由于您要检查两个条件然后更新数据库,因此首先需要获取引用的内容。 即使数据库中的基础位置没有值,条件 user1 的引用变量也将始终具有值。相反,您需要检查基础价值是否存在。

这必须通过异步编码(承诺)来完成,因为您需要检查的不是一个而是两个位置。

请通读 firebase 文档以了解创建参考变量和获取基础数据之间的区别。检查此文档https://firebase.google.com/docs/reference/node/firebase.database.DataSnapshot#exists

【讨论】:

    【解决方案2】:
     exports.onUserStatusChange = functions.database
      .ref("/{uid}/presence")
      .onUpdate(async (change, context) => {
        // Get the data written to Realtime Database
        const isOnline = change.after.val();
    
        // Get a User1 reference to the Firestore document
        const user1StatusFirestoreRef = firestore.doc(`user1_data/${context.params.uid}`);
        // Get a  User2 reference to the Firestore document
        const user2StatusFirestoreRef = firestore.doc(`user2_data/${context.params.uid}`);
    
        console.log(`status: ${isOnline}`);
    
    
        //   // Update the values on Firestore
    
    return promise.all([
     user1StatusFirestoreRef.update(
            {
              presence: isOnline,
              last_seen: Date.now(),
            }
    
    
          ),
     user2StatusFirestoreRef.update(
            {
              presence: isOnline,
              last_seen: Date.now(),
            }
    
    
          );
    
    ]);
    
      
    
    
    
    
      });
    

    【讨论】:

      猜你喜欢
      • 2021-11-27
      • 1970-01-01
      • 2018-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-08
      • 1970-01-01
      • 2013-08-04
      相关资源
      最近更新 更多