【发布时间】:2016-08-07 22:09:35
【问题描述】:
我在 Angular2.rc.4 Typescript 应用程序中使用 Observable 时遇到问题。我在这里有一个plunker: https://embed.plnkr.co/UjcdCmN6hSkdKt27ezyI/
本质上,该应用程序有一个具有以下代码的服务:
private messageSender : Observable<string>;
constructor() {
this.messageSender = Observable.create(observer => this.clients.push(observer));
}
public listenForMessages() : any {
console.log("Listen Requested...")
return this.messageSender;
}
我想从一个组件中收听它:
ngOnInit() {
this.chatter.listenForMessages().subscribe(msg => console.log(msg));
}
这给了我以下错误:
EXCEPTION: Error: Unrecognized teardown 1 added to Subscription.
Error: Unrecognized teardown 1 added to Subscription.
at Subscriber.Subscription.add (Subscription.ts:151)
at Observable.subscribe (Observable.ts:93)
at LoginPage.ngOnInit (login.ts:15)
at DebugAppView._View_LoginPage_Host0.detectChangesInternal (LoginPage.template.js:29)
at DebugAppView.AppView.detectChanges (view.ts:261)
at DebugAppView.detectChanges (view.ts:377)
at DebugAppView.AppView.detectContentChildrenChanges (view.ts:280)
at DebugAppView.AppView.detectChangesInternal (view.ts:272)
at DebugAppView.AppView.detectChanges (view.ts:261)
at DebugAppView.detectChanges (view.ts:377)
BrowserDomAdapter.logError @ browser_adapter.ts:82
如果 transpile tsc 或允许在浏览器中发生相同的错误,并且我以 ES6 或 ES5 为目标,则会发生相同的错误。
我已经看了好几个小时了,我在任何其他网站上都没有找到对它的引用。该错误消息来自 RxJS,它检查传递给 .subscribe() 方法的内容,检查其类型是“对象”还是“函数”,如果两者都不是,则发出此错误。我在 plunker 或预定义函数中传递了 lambda,它们会导致相同的问题。
有什么想法吗?如果我在组件中创建 Observable,那么就没有问题。如果我订阅了该服务,那么我会遇到同样的错误......所以很困惑。
【问题讨论】:
-
也许可以:私人消息发送者:Observable
;或私人消息发送者:Observable ; -
不幸的是,这不起作用。此外,也许奇怪的是,如果您开始通过 Observable 提供值,尽管出现错误,它们确实会收到,但其他函数(最值得注意的是 Angular2 生命周期方法)不会被执行。所以订阅有效,但应用程序在之后状态不佳......
标签: typescript angular rxjs