如何等待FirebaseListObservable的响应

时间:2016-11-30 01:57:36

标签: angular typescript firebase angularfire2

我一直在用Angularfire2制作一个Angular2应用程序。从Firebase检索数据时,我遇到了有关FirebaseListObservable的问题。这是我的代码。

this.requests = this._af.database.list('/requests');

在此之后不久,我记录了这个变量。

console.log(this.requests);

然后我得到一个未定义的,但我想等待这个请求的响应,因为this.requests总是在这段代码中未定义。我希望你教我如何等待firebase请求的结果。抱歉我的英语不好。

2 个答案:

答案 0 :(得分: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();
}
组件中的

,因此当组件被销毁时连接将被关闭。

答案 1 :(得分:0)

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)
      );
    }
  }