如何在实时数据库 [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;
});
});
我正在使用 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;
});
});