Firebase的云功能:如何同步从数据库中读取数据?

时间:2018-01-20 01:52:41

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

我使用Cloud Functions for Firebase构建HTTP端点。在此端点内,我尝试通过此方法同步读取Firebase实时数据库中的一些数据:

function getSomethingFromDbSynchronously (currency) {
    return new Promise((resolve, reject) => {
        var db = admin.database();
        var ref = db.ref("someref");
        ref.orderByChild("somechild").equalTo("something").once("value", function (snapshot) {
            resolve(snapshot);
        });
    });
}

但这对我不起作用。在此请求结束之前,我的API路由通过第一个return语句返回。 我做错了什么?

1 个答案:

答案 0 :(得分:2)

代码看起来很好:您正在创建一个新承诺并从getSomethingFromDbSynchronously()返回该承诺。但是调用getSomethingFromDbSynchronously()的代码需要等待承诺解析,例如:

getSomethingFromDbSynchronously("currency").then(function(snapshot) {
  console.log(snapshot.val());
});

虽然您可以查看新的asyncawait关键字,但只是将上述内容读取为同步发生,否则无法实现此同步。

请注意,您的代码比需要的时间长一些。由于once()已经返回一个承诺,您也可以直接返回:

function getSomethingFromDbSynchronously (currency) {
    var db = admin.database();
    var ref = db.ref("someref");
    return ref.orderByChild("somechild").equalTo("something").once("value");
}