如何返回异步等待诺言

时间:2018-10-16 08:14:35

标签: android firebase ionic-framework firebase-realtime-database async-await

我目前正在努力从某个用户那里获取所有Data对象。我以为我已经知道了,但是后来我注意到,它仅在我第二次单击按钮时才返回DATA(这意味着async无法正常工作)。如果您可以提出建议,那将是很大的帮助!谢谢!

async getData(UID) {
let container = [];
var firebaseRef = this.afd.database.ref();

  let qwee = await firebaseRef.child('AllData/')
  .orderByChild("UserID")
  .equalTo(UID)
  .on("child_added", function(snapshot) {

      container.push(snapshot.val());

  }); 

return container;
}

这是调用函数

async LoadUserData(){
this.Data = await this.provider.getData("Tom");
}

1 个答案:

答案 0 :(得分:0)

您似乎混合了回调和Promise。

您需要将回调包装在promise中,然后等待它。

async getData(UID) {
    let container = [];
    var firebaseRef = this.afd.database.ref();

    let qwee = await new Promise(function(resolve,reject){
       return firebaseRef.child('AllData/')
          .orderByChild("UserID")
          .equalTo(UID)
          .on("child_added", function(snapshot) {
              resolve(snapshot.val());
              //container.push(snapshot.val());

           });
        }); 
    container.push(qwee);
    return container;
}