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