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') }
}
当我尝试从这个 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') }
}