在Firebase中的云功能中读取数据库数据

时间:2017-10-30 09:00:51

标签: javascript node.js firebase firebase-realtime-database google-cloud-functions

在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");
});

1 个答案:

答案 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");
  });
});