2016-11-30 50 views
1

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

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

此后不久,我登录这个变量。

console.log(this.requests);

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

回答

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

谢谢,我还有一个问题。在ngOnInit中调用请求比构造函数更好吗?我学会了在ngOnInit之前调用构造函数。我总是无法决定使用哪个。如果你喜欢,我希望你会回答这个问题。 – taku845

+0

@taku。这是一个很好的做法,请参阅[this](http://stackoverflow.com/questions/35763730/difference-between-constructor-and-ngoninit)获取更多线程。 – JayChase

+0

谢谢!我会看到它。 – taku845

2

因为从火力地堡检索数据是异步的,你需要的时候请求的数据进入“订阅”的事件。关闭(取消)的连接是非常重要后不使用了,以避免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(); 
} 

在您的组件,所以当组件被销毁时,连接会关闭。

+0

感谢您的评论。我不知道这个取消订阅方法,所以我会了解如何使用它来关闭连接。 – taku845