首页 > 解决方案 > Firebase 云函数中的条件语句

问题描述

我的应用中有两种类型的用户。我希望通过 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(),
        }


      );

    }








  });

标签: firebasefirebase-realtime-databasegoogle-cloud-firestoregoogle-cloud-functions

解决方案


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

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

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


推荐阅读