首页 文章

Rxjs / AngularFire2:unsubscribe():“TypeError:非法调用”

提问于
浏览
0

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

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

names变量的类型为FirebaseListObservable

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

我在这做错了什么?观察者不应该等到下一个滴答?我应该手动完成吗?

更新:将回调代码包装在setTimeout(代码,0)中摆脱了错误 . 虽然我应该这样做但这似乎很奇怪?

1 回答

  • 1

    执行 next 块时完全依赖于实现 . 回调的关键在于,您的代码不应该关注事件何时到达,而只关注事件发生时应该发生什么 .

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

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

相关问题