0

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

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

names变量的类型为FirebaseListObservable

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

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

更新:将回调代码包装在 setTimeout( code , 0) 中消除了错误。我应该这样做似乎很奇怪?

4

1 回答 1

1

何时执行next块完全取决于实现。有一个回调的重点是你的代码不应该关心事件何时到达,只关心它发生时应该发生的事情。

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

let s = names.first().subscribe((a:Array<any>) => {
    if(a.length){ reject('name exists') }
}
于 2016-08-09T19:08:02.437 回答