我使用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语句返回。 我做错了什么?
答案 0 :(得分:2)
代码看起来很好:您正在创建一个新承诺并从getSomethingFromDbSynchronously()
返回该承诺。但是调用getSomethingFromDbSynchronously()
的代码需要等待承诺解析,例如:
getSomethingFromDbSynchronously("currency").then(function(snapshot) {
console.log(snapshot.val());
});
虽然您可以查看新的async
和await
关键字,但只是将上述内容读取为同步发生,否则无法实现此同步。
请注意,您的代码比需要的时间长一些。由于once()
已经返回一个承诺,您也可以直接返回:
function getSomethingFromDbSynchronously (currency) {
var db = admin.database();
var ref = db.ref("someref");
return ref.orderByChild("somechild").equalTo("something").once("value");
}