Rxjs / AngularFire2:unsubscribe():“TypeError:非法调用”

时间:2016-08-09 18:01:51

标签: angular rxjs angularfire2

当我尝试在此rxjs观察者中取消订阅时,我收到错误“非法调用”。

let s = names.subscribe((a:Array<any>) => {
    s.unsubscribe();
    if(a.length){ reject('name exists') }
}

名称变量的类型为FirebaseListObservable

设置一些断点,我可以看到立即调用观察者函数(回调)。此回拨后的任何代码都在回调已经运行一次后运行。因此, s 变量未定义,在回调中。

我在这里做错了什么?观察者不应该等到下一个滴答?我应该手动完成吗?

UPDATE:将回调代码包装在setTimeout(代码,0)中,摆脱了错误。虽然我应该这样做但这似乎很奇怪?

1 个答案:

答案 0 :(得分:1)

执行next块时完全依赖于实现。回调的重点是,当事件到达时,您的代码不应该关注,只有 应该发生的事情。

如果您只需要流中的第一项,那么您可以使用take(1)first()代替:

let s = names.first().subscribe((a:Array<any>) => {
    if(a.length){ reject('name exists') }
}