我有一个应该查询firebase db并返回结果的函数。
function verifyToken(token)
{
var androidId = 'xxxxx';
admin.database(dbDEV).ref('profiles').orderByChild('androidId').equalTo(androidId).on('value',(snapshot)=>{
console.log(snapshot.val());
return snapshot.val();
});
}
我正在为此使用firebase函数。因此结果正在Firebase日志中记录,但是执行功能时我没有获取并返回值。
答案 0 :(得分:0)
两件事:
使用一次()代替on()一次查询数据。 on()建立一个永久监听的监听器,直到您删除该监听器为止。
实时数据库查询都是异步的,这意味着它们将立即返回,并且稍后提供的回调函数将与结果一起调用。您不能简单地从回调中返回结果以从封闭函数中返回这些结果。如果希望verifyToken将查询结果提供给调用方,则应返回一个可以解决数据的Promise。
答案 1 :(得分:0)
您可以从使用诺言开始。例如:
function verifyToken(token) {
return new Promise(resolve => {
var androidId = 'xxxxx';
admin.database(dbDEV).ref('profiles').orderByChild('androidId').equalTo(androidId).on('value',(snapshot)=>{
console.log(snapshot.val());
resolve(snapshot.val());
});
});
}
当您需要结果时:
verifyToken(token).then(result => {
... do stuff
});
要对此进行改进,可以使用异步功能。例如:
async function foo() {
const result = await verifyToken(token);
console.log(result);
}