如何在实时数据库 [Firebase] 中使用云函数的 return

How to use the return of a cloud function in realtime databse [Firebase]

我正在使用 Firebase 的实时数据库。

我的 index.js 中有一个云函数 returns 一个对象:

{"state":"create","users":["user1","user2"]}

我想从我的 java 代码中获取它以便稍后使用,但我不知道如何继续..

这是我的云函数:

exports.getProductTypeUpdate = functions.database
.ref("Products/{product}/type")
.onUpdate((snapshot, context) => {
  // on récupère le type du produit
  const type = snapshot.after.val();
  // on récupère les utilisateurs interresse par le type d'objet
  admin.database().ref("Notif/type/" + type)
      .once("value").then((snapshot) => {
        const users = snapshot.val();
        // Retourne les utilisateurs à notifier et l'état de la requête
        const result = {state: "update", users: users};
        console.log("Le résultat final est: " + JSON.stringify(result));
        return result;
      }).catch((error) => {
        console.log("Error sending message:", error);
        return false;
      });
});

I have a cloud function in my index.js that returns an object... I would like to get it from my java code to use it later.

所有实时数据库云函数都是 backgound triggered 云函数(包括 .onUpdate),这意味着它们不与您的应用程序的任何其他组件通信(例如,您 Android front-end 您拥有的应用程序或服务器 运行 java 代码)。

如果您想将 Cloud Function 的结果发送回您的 Android front-end 应用程序,有几种可能性,具体取决于您的具体业务案例:

  • 从您的 Android 应用程序调用 Callable Cloud Function,它会写入 RTDB 并 return 返回结果(恕我直言,首选方法);
  • 设置一个监听器到你写入结果的RTDB节点的节点上(注意,它会花费一次写入)。

旁注:我建议您观看 Firebase 视频系列中关于“JavaScript Promises”的 3 个视频:https://firebase.google.com/docs/functions/video-series/.

特别是视频解释了为什么您必须 return Cloud Function 中的 Promise 链:

exports.getProductTypeUpdate = functions.database
.ref("Products/{product}/type")
.onUpdate((snapshot, context) => {
  // on récupère le type du produit
  const type = snapshot.after.val();
  // on récupère les utilisateurs interresse par le type d'objet
  return admin.database().ref("Notif/type/" + type)   // <= !!! See return here
      .once("value").then((snapshot) => {
        const users = snapshot.val();
        // Retourne les utilisateurs à notifier et l'état de la requête
        const result = {state: "update", users: users};
        console.log("Le résultat final est: " + JSON.stringify(result));
        return result;
      }).catch((error) => {
        console.log("Error sending message:", error);
        return false;
      });
});