RxJs Subject.subscribe方法无法按预期工作

时间:2016-11-01 14:02:00

标签: angular typescript rxjs rxjs5

调用时

Subject.subscribe方法输出以下错误:

TypeError: Cannot read property '_subscribe' of undefined
at BidirectionalSubject._subscribe (Rx.js:10239)
at BidirectionalSubject._subscribe (Rx.js:10239)
at BidirectionalSubject.Observable.subscribe (Rx.js:9924)
at AppComponent.doIt (app.component.ts:32)
at ChangeDetector_AppComponent_0.handleEventInternal (eval at ChangeDetectorJITGenerator.generate (angular2.dev.js:1), <anonymous>:29:29)
at ChangeDetector_AppComponent_0.AbstractChangeDetector.handleEvent (angular2.dev.js:8788)
at AppView.dispatchEvent (angular2.dev.js:9396)
at AppView.dispatchRenderEvent (angular2.dev.js:9391)
at DefaultRenderView.dispatchRenderEvent (angular2.dev.js:7819)
at eventDispatcher (angular2.dev.js:9781)

见Plunkr here

这是我面临的更大问题的一部分。 在我的实际代码中,subscribe方法没有抛出但只是没有向observer添加subject,因此在所有subject.next调用中都没有人接收发出的数据。

我认为问题是相关的。在我的实际代码中,我使用的是rxjs的5.0.0-beta.12版本。然而,在plukr中,rx依赖似乎来自角度本身。

1 个答案:

答案 0 :(得分:3)

请注意使用Subject.create()

这与new Subject()不同,绝大多数情况下您只想使用new Subject()代替Subject.create()。使用Subject.create(),您创建的AnonymousSubject实例永远不会自我订阅,因此flatMap()运算符在尝试将AnonymousSubject订阅到另一个{{1}时会引发错误}}

请参阅我对类似问题的回答:Subjects created with Subject.create can't unsubscribe

我刚刚将AnonymousSubject更改为Subject.create()并且它可能正常运作。

查看更新后的演示:https://plnkr.co/edit/6M1lPLZA16vwQsVAjNzc?p=preview

虽然,我不知道该演示应该做什么,但我无法判断它是否正常工作。