【问题标题】:How to wait response of FirebaseListObservable如何等待 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 请求的结果。对不起我的英语不好。

【问题讨论】:

    标签: angular typescript firebase angularfire2


    【解决方案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();
    }
    

    在您的组件中,因此当您的组件被销毁时连接会关闭。

    【讨论】:

    • 感谢您的评论。我不知道这种取消订阅方法,所以我将学习如何使用它来关闭连接。
    猜你喜欢
    • 2022-01-06
    • 2022-07-01
    • 1970-01-01
    • 2020-03-07
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 2011-02-19
    相关资源
    最近更新 更多