网站搜索

angular - 如何在运行下一行代码之前等待 AngularFire2 订阅完成 Angular2


我的 Angular2 TypeScript 代码有一个问题。我正在尝试从 Firebase 数据库访问问题,我是通过订阅 FirebaseListObserver 来实现的:

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 内订阅,但也返回了一个空数组。

答案#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 是否有值并对其作出反应,调用你需要的任何函数。