Firebase / Angular:异步检索数据

时间:2019-08-30 20:27:49

标签: typescript firebase google-cloud-firestore

我正在跟踪Firebase提供的official documentation,以使用get关键字检索数据。

我有一个应该在查询完成后返回某些内容的函数。问题是我的函数没有等待Firebase完全获取信息,而是返回null。代码如下:

角色界面:

interface Role {
    standard?: boolean,
    premium?: boolean,
}

customerRole函数:

customerRole(): Role {
    let customerRole: Role = null;
    this.db.collection('customer').doc(customer.uid).get().then(doc => {
      console.log('Two');
      if (doc.exists) {
        console.log('Three - doc is: ', doc.data().role);
        customerRole = doc.data().role;
        console.log('Four');
      } else {//doc.data() doesn't exist
        console.log('No such document!');
        console.log('Five');
      }
      console.log('Six');
    });
    console.log('Seven');
    return customerRole; //always null since the firebase query hasn't finished yet.
}

这将产生以下输出:

  

一个

     

七个

     

此客户的角色是null // //来自以下功能   致电customerRole()

     

两个

     

三个-文档为:{standard:true}

     

四个

     

六个

我必须返回一个Role对象(这是必须的!),所以我不能使用async / await,因为它必须返回一个承诺。我尝试像这样async / await

customerRole(): Role {
    let customerRole: Role = null;
    this.db.collection('customer').doc(customer.uid).get().then(async doc => {
      console.log('Two');
      if (doc.exists) {
        console.log('Three - doc is: ', await doc.data().role);
        customerRole = await doc.data().role;
        console.log('Four');
      } else {//doc.data() doesn't exist
        console.log('No such document!');
        console.log('Five');
      }
      console.log('Six');
    });
    console.log('Seven');
    return customerRole; //always null since the firebase query hasn't finished yet.
}

但是问题仍然存在。

0 个答案:

没有答案
相关问题