我正在将离子3.8应用程序迁移到3.9.2。 此迁移包括对RXJS 5.5的更新
我现在遇到这个错误:
TypeError: this._subscribe is not a function. (In 'this._subscribe(sink)', 'this._subscribe' is an instance of t)
经过数小时的调试,我发现此代码部分与错误有关:
protected observeConnectionState() {
// rxjs/observable/of
of(new Event('disconnect'))
.pipe(
// rxjs/operators/merge
merge(connect$),
merge(disconnect$),
// Map eventname to string (rxjs/operators/map)
map((e: IEvent) => {
return e.eventName == 'connect' ? 'connected' : 'disconnected';
})
)
// Apply to class context
.subscribe((newConnectionState) => {
// this.connectionState$ is a BehaviorSubject
this.connectionState$.next(newConnectionState);
});
}
附加信息
this._subscribe
:Observable.ts Line 203和Observable.ts Line 208。答案 0 :(得分:8)
好吧,我发现了问题。它与科尔多瓦无关。
对于遇到此问题的其他人:
忘记堆栈痕迹 - 它没用。在我的情况下,在variable
的订阅者中,我试图从承诺中创建一个Observable。但我做错了。
这是错误的:
this.connectionState$
这是应该做的:
import { Observable } from 'rxjs/Observable';
//...
const myObservable$ = Observable.create(myPromise);
答案 1 :(得分:5)
当我将Observable.of(someval as any)
替换为new Observable(someval as any)
时,在升级时我在一个角度应用程序中得到了完全相同的错误消息。
错误:未捕获(承诺):TypeError:this._subscribe不是函数
我也尝试过将其设置为Observable.create(someval as any)
,但存在相同的错误。
用of(someval as any)
代替它为我解决了这个问题。
import { of } from 'rxjs';
// use it just like this
of(retval as any);
详细的错误消息
ERROR错误:未捕获(承诺):TypeError:this._subscribe不是 一个函数TypeError:this._subscribe不是一个函数 在Observable.push ../ node_modules / rxjs / _esm5 / internal / Observable.js.Observable._trySubscribe中 (Observable.js:42) 在Observable.push ../ node_modules / rxjs / _esm5 / internal / Observable.js.Observable.subscribe (Observable.js:28) 在MapOperator.push ../ node_modules / rxjs / _esm5 / internal / operators / map.js.MapOperator.call中 (map.js:18) 在Observable.push ../ node_modules / rxjs / _esm5 / internal / Observable.js.Observable.subscribe (Observable.js:23) 在MapOperator.push ../ node_modules / rxjs / _esm5 / internal / operators / map.js.MapOperator.call