Async Await无法从Firebase阅读数据(带有React原生)

z5btuh9x  于 2022-11-17  发布在  React
关注(0)|答案(3)|浏览(102)

这是我当前的代码(见图片)我需要OwnProfile函数等待GetUsername函数完成从firebase阅读数据,然后再继续。我尝试了async await,但它不工作,如终端所示,在GetUsername获得数据之前使用了第52和54行。
有人有什么建议吗?

inb24sb2

inb24sb21#

您需要等待GetUsername方法,以便在数据有响应时执行console.log

async function OwnProfile ({navigation}){
        const data = await GetUsername();
        ….}
gkl3eglg

gkl3eglg2#

由于您使用的是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()以防出错。

fnvucqvd

fnvucqvd3#

如果你查看on的参考文档,你会发现它没有返回Promise,所以你不能返回await的结果。使用once(或get)代替:

function GetUsername() {
  return database()
      .ref('/users/prathik1')
      .once('value')
      .then((snapshot) => snapshot.val());
}

相关问题