这是我当前的代码(见图片)我需要OwnProfile函数等待GetUsername函数完成从firebase阅读数据,然后再继续。我尝试了async await,但它不工作,如终端所示,在GetUsername获得数据之前使用了第52和54行。有人有什么建议吗?
inb24sb21#
您需要等待GetUsername方法,以便在数据有响应时执行console.log
async function OwnProfile ({navigation}){ const data = await GetUsername(); ….}
gkl3eglg2#
由于您使用的是GetUsername()中的回调函数,因此必须返回一个要在回调函数代码中解析的Promise,如下所示:
GetUsername()
Promise
async function GetUsername() { return new Promise((resolve, reject) => { database() .ref('/users/prathik1') .on('value', snapshot => { resolve(snapshot.val()); }); }); }
有了这个你应该可以
const result = await GetUsername();
注意:这只是一个不完整的示例。请注意调用reject()以防出错。
reject()
fnvucqvd3#
如果你查看on的参考文档,你会发现它没有返回Promise,所以你不能返回await的结果。使用once(或get)代替:
on
await
once
get
function GetUsername() { return database() .ref('/users/prathik1') .once('value') .then((snapshot) => snapshot.val()); }
3条答案
按热度按时间inb24sb21#
您需要等待GetUsername方法,以便在数据有响应时执行console.log
gkl3eglg2#
由于您使用的是
GetUsername()
中的回调函数,因此必须返回一个要在回调函数代码中解析的Promise
,如下所示:有了这个你应该可以
注意:这只是一个不完整的示例。请注意调用
reject()
以防出错。fnvucqvd3#
如果你查看
on
的参考文档,你会发现它没有返回Promise
,所以你不能返回await
的结果。使用once
(或get
)代替: