サブスクライブは非推奨です:エラーコールバックの代わりにオブザーバーを使用してください


103

リンターを実行すると、次のように表示されます。

subscribe is deprecated: Use an observer instead of an error callback

コード(angular-cliを使用したAngular 7アプリから):

    this.userService.updateUser(data).pipe(
       tap(() => {bla bla bla})
    ).subscribe(
       this.handleUpdateResponse.bind(this),
       this.handleError.bind(this)
    );

何をどのように使うべきか正確にはわかりません...

ありがとう!


1
*そう使用してみてください.subscribe({ next: this.handleUpdateResponse.bind(this), error: this.handleError.bind(this) })
コス

私は私のapiRest使用してそれを動作させるために管理していない
ハビエル・

回答:


143

subscribeは非推奨ではなく、使用しているバリアントのみが非推奨になります。将来的にsubscribeは、nextハンドラー(関数)またはオブザーバーオブジェクトのいずれかの引数のみを取ります。

したがって、あなたの場合は以下を使用する必要があります。

.subscribe({
   next: this.handleUpdateResponse.bind(this),
   error: this.handleError.bind(this)
});

これらのGitHubの問題を参照してください。


6
その構文(rxjs 6.5.3)で廃止予定のショーまだVSコードでホバリング... IDKの
Yannicハマン

6
ねえ@YannicHamannこのコメントは理由を説明しています。非推奨ではありません。オーバーロードの1つを非推奨にしただけで、すべてが非推奨になっているように見えます。これは主にツールの問題です。
ディーン

すべてのサブスクライブメソッドがrxjs6.5.4で非推奨になっているため、この回答はもはや有効ではないと思います
AlokRajasukumaran20年

44

observerオブジェクトには、complete()メソッドやその他の追加のプロパティを(まだ)含めることができることに注意してください。例:

.subscribe({
    complete: () => { ... }, // completeHandler
    error: () => { ... },    // errorHandler 
    next: () => { ... },     // nextHandler
    someOtherProperty: 42
});

このようにすると、特定のメソッドを省略するのがはるかに簡単になります。古い署名ではundefined、引数の順序を指定して固執する必要がありました。たとえば、次の完全なハンドラーのみを提供する場合は、はるかに明確になります。


11

オブジェクトObservable<T> | Observable<T2>Observable<T|T2>。ではなく-として入力されている場合、このエラーが発生する可能性があります。

例えば:

    const obs = (new Date().getTime() % 2 == 0) ? of(123) : of('ABC');

コンパイラは型を作成しませobsObservable<number | string>

次のようにエラーが発生しUse an observer instead of a complete callbackExpected 2-3 arguments, but got 1.

obs.subscribe(value => {

});

これは、2つの異なるタイプのいずれかである可能性があり、コンパイラーがそれらを調整するほど賢くないためです。

Observable<number | string>代わりに戻るようにコードを変更する必要がありますObservable<number> | Observable<string>。これの微妙な点は、何をしているかによって異なります。


2

サブスクライブするためにこれを渡していたので、警告が表示されていました。

myObs.subscribe(() => someFunction());

単一の値を返すため、subscribeの関数シグネチャと互換性がありませんでした。

これに切り替えると、警告が消えました(null / voidを返します)。

myObs.subscribe(() => {
  someFunction();
});
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.