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

时间:2018-01-06 01:14:09

标签: ionic-framework observable angularfire2 subscribe

In ionic 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!
  });
}

我已经尝试了很多次,但我看不到“完成”。

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

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

,,我能做什么..?

1 个答案:

答案 0 :(得分:0)

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

请注意,取消订阅时不会调用完整的处理程序。当observable完成时调用它们。

如果您希望在完成或取消订阅时调用回调,则可以改为使用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);
    });
}