打字稿:我无法从Firebase承诺中获取数据

时间:2018-06-15 16:30:33

标签: typescript firebase firebase-realtime-database

我正在尝试从firebase中提取数据(用户名)。我能够将数据拉下来,但我无法将数据分配给firebase函数以外的任何内容。我该如何获取数据并使用它?我想简单地用我下拉的数据更新标签。

getData(){
     var userID = this.firAuth.auth.currentUser.uid;
     var name;
     console.log("userID: " + userID);
     this.name = "user";
     this.firService.database.ref("/users").once('value').then(function (snapshot){
   snapshot.forEach(snap => {
     if (snap.key == userID){
       this.name = snap.val().name; //this wont work
     }
    });
  });
 }

1 个答案:

答案 0 :(得分:1)

那是因为Firebase APIs are asynchronous。这意味着您无法获取数据。您需要在函数内部使用它。

或者,您可以使用ECMAScript 2017中的async / await。将您的函数声明为async并使用await来检索快照:

async function getData(){
    var userID = this.firAuth.auth.currentUser.uid;
    var name;
    console.log("userID: " + userID);
    this.name = "user";

    var snapshot = await this.firService.database.ref("/users").once('value');
    snapshot.forEach(snap => {
        if (snap.key == userID){
            this.name = snap.val().name;
        }
    });
}