如何等待 FirebaseListObservable 的响应
Posted
技术标签:
【中文标题】如何等待 FirebaseListObservable 的响应【英文标题】:How to wait response of FirebaseListObservable 【发布时间】:2017-04-14 05:21:33 【问题描述】:我一直在用 Angularfire2 制作一个 Angular2 应用程序。从 Firebase 检索数据时,我遇到了有关 FirebaseListObservable 的问题。这是我的代码。
this.requests = this._af.database.list('/requests');
此后不久,我记录了这个变量。
console.log(this.requests);
然后我得到一个未定义的,但我想等待此请求的响应,因为 this.requests 在此代码中始终未定义。我想让你教我如何等待 firebase 请求的结果。对不起我的英语不好。
【问题讨论】:
【参考方案1】:list 方法返回一个 Observable,因此您可以订阅它以获取返回的请求。
export class AppComponent
requests: FirebaseListObservable<any[]>;
constructor(private af: AngularFire)
ngOnInit()
this.requests = this.af.database.list('/requests');
this.requests.subscribe(
(requests) =>
console.log(requests)
,
err => console.log(err)
);
【讨论】:
谢谢,我还有一个问题。在 ngOnInit 中调用请求比在构造函数中调用更好吗?我了解到构造函数是在 ngOnInit 之前调用的。我总是无法决定使用哪个。如果你愿意,我希望你能回答这个问题。 @taku。这是一个很好的做法,请参阅this 线程了解更多信息。 谢谢!我会看到的。【参考方案2】:由于从 Firebase 检索数据是异步的,因此您需要在请求的数据进入时“订阅”事件。重要的是在不再使用连接后关闭(取消订阅)连接以避免further problems。这可以通过以下代码实现:
this.requests = this._af.database.list('/requests')
.subscribe(data =>
data.forEach(obj =>
console.log(obj.$key);
console.log(obj.$value);
);
this.requests.unsubscribe();
);
如果你想保留连接,因为你正在更新你的数据,你应该省略this.requests.unsubscribe();
,而是把
ngOnDestroy()
this.requests.unsubscribe();
在您的组件中,因此当您的组件被销毁时连接会关闭。
【讨论】:
感谢您的评论。我不知道这种取消订阅方法,所以我将学习如何使用它来关闭连接。以上是关于如何等待 FirebaseListObservable 的响应的主要内容,如果未能解决你的问题,请参考以下文章