RXJS:TypeError:this._subscribe不是函数

时间:2017-11-10 20:40:34

标签: angular ionic3 rxjs5

我正在将离子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);
        });
}

附加信息

2 个答案:

答案 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