ionic 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 2 および Observable.ts Line 208 です。さて、私は問題を見つけました。そしてそれはコルドバとは関係ありません。
この問題に遭遇した他の人々のために:スタックトレースを忘れてください-それは役に立たないです。私の場合、this.connectionState$
プロミスからObservableを作成しようとしました。しかし、私はそれを間違っていました。
これは間違っていたものです:
import { Observable } from 'rxjs/Observable';
//...
const myObservable$ = Observable.create(myPromise);
これはどのように行われるべきかです:
import { fromPromise } from 'rxjs/observable/fromPromise';
// ...
const myObservable$ = fromPromise(myPromise);
Observable.of(someval as any)
をnew Observable(someval as any)
に置き換えたとき、アップグレード中に、angularアプリケーションの1つでまったく同じエラーメッセージが表示されました。
エラー:キャッチされていません(約束されています):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);
詳細なエラーメッセージ
エラーエラー:キャッチされていません(約束されています):TypeError:this._subscribeは関数ではありませんTypeError:this._subscribeはObservable.Push ../ node_modules/rxjs/_esm5/internal/Observable.js.Observable._trySubscribeの関数ではありませんObservable.js:42)at Observable.Push ../ node_modules/rxjs/_esm5/internal/Observable.js.Observable.subscribe(Observable.js:28)at MapOperator.Push ../ node_modules/rxjs/_esm5/internal/operator/map.js.MapOperator.call(map.js:18)at Observable.Push ../ node_modules/rxjs/_esm5/internal/Observable.js.Observable.subscribe(Observable.js:23)at MapOperator.Push。 ./node_modules/rxjs/_esm5/internal/operators/map.js.MapOperator.call