【问题标题】:Rxjs / AngularFire2: unsubscribe(): "TypeError: Illegal Invocation"Rxjs / AngularFire2:取消订阅():“TypeError:非法调用”
【发布时间】:2016-12-15 21:39:03
【问题描述】:

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

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

names 变量的类型为 FirebaseListObservable

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

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

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

【问题讨论】:

    标签: angular rxjs angularfire2


    【解决方案1】:

    何时 next 块被执行完全依赖于实现。有一个回调的重点是你的代码不应该关心自己什么时候事件到达,只有当它发生时应该发生什么

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-26
      • 2020-10-28
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 2021-11-18
      • 1970-01-01
      相关资源
      最近更新 更多