当我尝试在此rxjs观察者中取消订阅时,我收到错误“非法调用”。
let s = names.subscribe((a:Array<any>) => {
s.unsubscribe();
if(a.length){ reject('name exists') }
}
名称变量的类型为FirebaseListObservable
设置一些断点,我可以看到立即调用观察者函数(回调)。此回拨后的任何代码都在回调已经运行一次后运行。因此, s 变量未定义,在回调中。
我在这里做错了什么?观察者不应该等到下一个滴答?我应该手动完成吗?
UPDATE:将回调代码包装在setTimeout(代码,0)中,摆脱了错误。虽然我应该这样做但这似乎很奇怪?
答案 0 :(得分:1)
执行next
块时完全依赖于实现。回调的重点是,当事件到达时,您的代码不应该关注,只有 应该发生的事情。
如果您只需要流中的第一项,那么您可以使用take(1)
或first()
代替:
let s = names.first().subscribe((a:Array<any>) => {
if(a.length){ reject('name exists') }
}