как вернуть асинхронное ожидание обещания - PullRequest
0 голосов
/ 16 октября 2018

В настоящее время я работаю над получением всего объекта Data от определенного пользователя.Я думал, что уже получаю его, но потом я заметил, что он возвращает ДАННЫЕ только во второй раз, когда я нажимаю кнопку (значит, асинхронизация не работает). Если вы можете посоветовать, это было бы очень полезно!Спасибо!

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 голосов
/ 16 октября 2018

Вы, кажется, смешиваете обратные вызовы и обещания.

Вам нужно будет заключить обратный вызов в обещание и затем ждать его.

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...