【发布时间】:2018-10-17 10:00:09
【问题描述】:
我对 typescript 相当陌生,到目前为止我已经使用它,但我发现了一个奇怪的错误/错误,我无法通过 async/await 解决。
我有以下代码 sn-p,我的问题是 'await' 子句不适用于 .once() 函数。
async function testFunction(deviceID:string){
const returnObject:{name:string, description:string, tokens:string[]}[] = [];
const deviceRef = admin.database().ref('deviceInfo/').orderByChild('id').equalTo(deviceID);
await deviceRef.once('value', async (payload) => {
const pushObject:{name:string, description:string, tokens:string[]} = {name:"", description:"", tokens:[]};
if(payload.exists()){
const devices = payload.val();
const keys = Object.keys(devices);
for(const key of keys){
pushObject.name = devices[key].name;
pushObject.description = devices[key].description;
pushObject.tokens = await getTokens(key);
returnObject.push(pushObject);
}
console.log("Return Object 1:", returnObject);
return returnObject;
}
else{
return null;
}
})
console.log("Return Object 2:", returnObject);
return returnObject;
}
这个函数总是返回 {name:" ", description: " ", tokens:[]} 即使我在 deviceRef.once() 函数的开头有 'await'。
console.logs 也打印,“返回对象 1”打印正确的对象以及从数据库中检索到的所有数据,但“返回对象 2”打印一个空数组。所以很明显,await 没有等待 once() 函数完成,我只是不确定这是为什么?
任何帮助或建议将不胜感激
【问题讨论】:
标签: typescript firebase firebase-realtime-database async-await google-cloud-functions