如何调用 Observable.complete 回调函数?它不起作用

How I can call Observable.complete callback function? It doesn't work

在离子 2 中,(和 angularfire2@4.0.0-rc.0、firebase@3.9.0) 我试过这段代码,但完整的功能不起作用!

constructor(public af: AngularFireDatabase, ...) { 
  this.temp = af.list('/myTest').subscribe(data => {
    ...  // my tastks
  }, error => {
    console.log(error);
  }, () => {
    console.log("done!");  // I can't see this output!
  });
}

我已经试了很多次了,还是看不到"done"。

在另一个函数中,我尝试了这个,但结果与第一个相同。

console.log(this.temp.closed); // false
this.temp.unsubscribe()
console.log(this.temp.closed); // true

, 我能做什么..?

AngularFire listobject 可观察对象未完成。他们的内部 Firebase refs 保持连接,监听数据库的变化。

如果希望列表在收到第一个值后完成,可以使用 first 运算符:

import "rxjs/add/operator/first";

constructor(public af: AngularFireDatabase, ...) { 
  this.temp = af.list('/myTest')
    .first()
    .subscribe(data => {
      ...  // my tastks
    }, error => {
      console.log(error);
    }, () => {
      console.log("done!");
    });
}

请注意,取消订阅时不会调用完整的处理程序。它们在可观察对象完成时被调用。

如果您希望在完成或取消订阅时调用回调,您可以改用 finally 运算符:

import "rxjs/add/operator/finally";

constructor(public af: AngularFireDatabase, ...) { 
  this.temp = af.list('/myTest')
    .finally(() => {
      console.log("done!");
    })
    .subscribe(data => {
      ...  // my tastks
    }, error => {
      console.log(error);
    });
}