在firebase文档中,我没有找到一种从firebase db获取数据的简单方法 - 只能通过事件(.on,.once)。这是唯一的方法吗?
在这种情况下,要从不同的分支获取数据,我需要在处理程序中描述处理程序?而response.send()必须在最深的处理程序中?
这是正确的功能吗?
exports.test = functions.https.onRequest((request, response) => {
var db = admin.database();
db.ref("test/val").once("value", snap => {
var val1 = snap.val();
db.ref("test/val").set(val1+1);
db.ref("test2/val").once("value", snap => {
var val2 = snap.val();
response.send(val1+", "+val2);
});
});
//response.send("bad way");
});
答案 0 :(得分:1)
你很接近,但你需要确保等待所有异步工作完成(你的set
没有等待)。我已经重新设计了一些使用promises而不是回调来使流程清晰:
exports.test = functions.https.onRequest((request, response) => {
var db = admin.database();
var val1, val2;
db.ref("test/val").once("value").then(snap => {
val1 = snap.val();
return db.ref("test/val").set(val1+1);
}).then(() => {
return db.ref("test2/val").once("value');
}).then(snap => {
val2 = snap.val();
response.send(val1+", "+val2);
}).catch(err => {
console.log(err);
response.send("error occurred");
});
});