Rxjs / AngularFire2: unsubscribe(): "TypeError: Illegal Invocation"

Rxjs / AngularFire2: unsubscribe(): "TypeError: Illegal Invocation"

当我尝试从这个 rxjs 观察器中退订时,出现错误 "Illegal Invocation"。

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

names 变量的类型是 FirebaseListObservable

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

我在这里做错了什么? observable 不应该等到下一个 tick 吗?我应该手动做吗?

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

When 执行 next 块完全取决于实现。回调的意义在于,您的代码不必关心 when 事件到达,只有 what 应该在事件到达时发生.

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

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