【问题标题】:how to return async await promise如何返回异步等待承诺
【发布时间】:2019-03-20 17:10:04
【问题描述】:

我目前正在从某个用户那里获取所有 Data 对象。我以为我已经得到它了,但后来我注意到它只在我第二次单击按钮时返回一个 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");
}

【问题讨论】:

  • 这个函数的调用上下文是什么? async 函数返回的承诺会解析为函数返回的任何内容。
  • 我已经更新了上面的内容,@JamesPoag。感谢您指出。

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


【解决方案1】:

您似乎在混合回调和承诺。

您需要将回调包装在一个 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-20
    • 2019-07-20
    • 2022-01-09
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    相关资源
    最近更新 更多