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