【问题标题】:Rxjs delay subscription to Subject to fire after completeRxjs 延迟订阅Subject 完成后触发
【发布时间】:2019-09-26 18:36:05
【问题描述】:

我创建了这个例子来演示这个问题:https://stackblitz.com/edit/rxjs-vxvmq1?file=index.ts&devtoolsheight=100

基本上,我想在主题完成时调用一个函数(例如示例中的cleanup)。该函数由其他人调用,因此不订阅主题的更改,而是在那里订阅以触发完成主题的函数。该函数会在主题完成时检查它是否应该做额外的工作,因此它会检查主题是否已经停止。但是好像一旦调用了next(),在调用complete()之前就触发了函数,使得函数认为主题还没有完成。

不知道有没有办法解决这个问题?先调用complete() 然后next() 没有帮助,因为next() 在主题完成后没有通知订阅。

【问题讨论】:

    标签: rxjs


    【解决方案1】:

    长话短说。都是错的。

    修复 #1,而不是 rxjs 惯用语:您订阅错误:传递 onNext 回调,而您对 onComplete 感兴趣。 subscribe 采用三个参数:onNext, onError, onComplete,您负责选择您真正需要的参数。

    修复 #2,rxjs-idiomaric:您必须使用 pipe(...) 以及在 rxjs/operators (AFAIR) 中定义的运算符。请注意,定义自定义运算符也很容易。因此,您可以使用finalize(() => ...your cleanup logic goes here)Observable.create 返回终结逻辑作为unsubscribe 的实现。两者都有很好的记录 herehere

    此外,您似乎误解了rxjs 的语义。就正则表达式而言,它可以定义为next*(error|complete),字面意思是:零个或无限多个next 后跟errorcomplete(互斥或:从不同时)恰好一次。所以不要指望nextcomplete(或同样error)被解雇后做任何事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-14
      • 1970-01-01
      • 2022-07-11
      • 2021-11-16
      • 1970-01-01
      • 2020-07-13
      相关资源
      最近更新 更多