【问题标题】:How to wait for a AngularFire2 subscription to finish before running the next lines of code Angular2如何在运行下一行代码 Angular2 之前等待 AngularFire2 订阅完成
【发布时间】:2017-12-21 23:14:03
【问题描述】:

我的 Angular2 类型脚本代码有问题。我正在尝试通过订阅 FirebaseListObserver 来访问 Firebase 数据库中的问题:

this.af.list('/questions').subscribe( val => {
     this.questions = val
     console.log(this.questions) // works
})
console.log(this.questions) // displays undefined

不过,我不知道如何等待订阅获取值,然后再运行依赖于this.questions 的函数。

我尝试使用 async/await,但也没有等待订阅获取值。

我也尝试在 Promise 中订阅,但也返回了一个空数组。

【问题讨论】:

    标签: angular typescript firebase firebase-realtime-database async-await


    【解决方案1】:

    您可以在subscribe 回调中运行该函数,也可以将questions 转换为setter/getter:

    private _questions = [];
    
    set questions(questions) {
      this._questions = questions;
    
      // React to questions changes here
    }
    
    get questions() {
     return this._questions;
    }
    

    如果您熟悉 Angular 的早期版本,它的行为有点像观察者。因此,在set 函数中,您可以检查questions 是否具有值并对其做出反应,调用您需要的任何函数。

    【讨论】:

    • 我已经尝试在订阅回调中调用该函数,但它似乎工作不一致,所以有时它工作,但有时它返回未定义。我对 setter/getter 有同样的问题。
    • @LucasMähn 这不应该发生,您可以在订阅前添加.filter(data => data !== undefined) 看看是否有帮助?
    猜你喜欢
    • 2018-05-20
    • 1970-01-01
    • 2021-07-30
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多