catchError()を使用しても、rxJs 6.0で型指定されたObservableを返すにはどうすればよいですか?

リック・ストラール

cdSo Angular 5コードの一部を6に移行しようとしていますが、.pipe()演算子を使用してrxjsが機能するために必要な変更のほとんどを理解しています。'pipable'操作で期待するとおりに機能します。

ただし、の動作は演算子catchError()は異なり.catch()ます。rxjs 6より前は、.catch()演算子を使用してエラー入力を一貫性のあるエラーオブジェクトに変換し、それを `.subscribe()でキャッチできました。

getAlbums(): Observable<Album[]> {
     return this.httpClient.get<Album[]>(this.config.urls.url("albums"))
           .map(albumList => this.albumList = albumList)
           .catch(new ErrorInfo().parseObservableResponseError);            
    }

new ErrorInfo().parseObservableResponseErrorエラーオブジェクトを入力として受け取り、入力エラーを正規化されたオブジェクトを使用してより単純なエラーオブジェクトに解析する関数です。キャッチリターンObservable<any>

parseObservableResponseError(response): Observable<any> {
    let err = new ErrorInfo();
    ...
    return Observable.throw(err);        
}

これは、rxjs5までのエラーを簡単に処理するのに最適です。エラーは基本的にパイプラインの一部としてキャプチャされ、.subscribe()エラー関数でキャプチャできる既知のエラー構造をスローします。

ただし、同じコードをrxjs 6に移動し、使用.pipe()して次のことを実行しようとしています。

getAlbums(): Observable<Album[]> {
    return this.httpClient.get<Album[]>(this.config.urls.url("albums"))
                .pipe(
                    map(albumList => this.albumList = albumList),
                    catchError(new ErrorInfo().parseObservableResponseError)                        
                );           
}

ただし、catchErrorが結果をObservable<any>パイプラインに返すようになったため、これは機能しません。これは、ここで必要なことではありません。本質的には、以前と同じようにエラーを再スローしたいだけです。

エラーTS2322:タイプ 'Observable <{} | Album []> 'はタイプ' Observable 'に割り当てることができません

古いオペレーターの.catch()動作をどのようにシミュレートしますか?

更新:

これをもう少しいじった後、示されているコードはビルドエラーを出さずに動作を開始しました。正直なところ、以前はエラーメッセージで失敗した理由がわかりませんが、現在は機能しています。コメント内の@cartantによる提案は、結果を指定する明示的な方法であり、それも機能します。

カータント

タイプパラメータを明示的に指定してcatchError、値を発行するオブザーバブルを返さないこと、つまり、返すことを示し、Observable<never>常に次をスローできるようにする必要があります

getAlbums(): Observable<Album[]> {
    return this.httpClient.get<Album[]>(this.config.urls.url("albums"))
        .pipe(
            map(albumList => this.albumList = albumList),
            catchError<Album[], never>(new ErrorInfo().parseObservableResponseError)
        );           
}

そうすることで、pipe呼び出しから推測されたタイプがであることがわかりますObservable<Album[]>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Angular、RxJs 6、およびInMemoryAPIを使用して、複数の監視可能なソースにネストされているように見える、返されたObservable値を取得するにはどうすればよいですか?

分類Dev

Angular6の新しいRXJS6パイプ/マップで解決されたデータを返すにはどうすればよいですか?

分類Dev

Perl6で繰り返されるアイテムで構成されるリストを取得するにはどうすればよいですか?

分類Dev

C ++で6桁の0が埋め込まれた16進値のみを出力するようにするにはどうすればよいですか?

分類Dev

Perl 6で印刷したい長い文字列を分割するにはどうすればよいですか?

分類Dev

Xcode 6でキーボードが表示されたときに表示されないビューを修正するにはどうすればよいですか?

分類Dev

Entity Framework6が生成されたクエリにORDERBYを追加しないようにするにはどうすればよいですか?

分類Dev

Canvasで半径内に対称的に間隔を置いて配置された6本の線を描画するにはどうすればよいですか?

分類Dev

Foundation 6のJavascriptを使用するにはどうすればよいですか?

分類Dev

Ubuntu LinuxでJVisualvmを使用してTomcat6を監視するにはどうすればよいですか?

分類Dev

Qt6を使用してQMLでDropShadow効果を作成するにはどうすればよいですか?

分類Dev

Storyboardを使用してXcode6でUIButton接続を作成するにはどうすればよいですか?

分類Dev

rxjs6を使用してAngular8でスクロールアニメーションを実装するにはどうすればよいですか?

分類Dev

JS子コンポーネントを入力せずに、型指定されていないES6反応コンポーネントをTypescriptコンポーネントにインポートするにはどうすればよいですか?

分類Dev

16.04で安定したIPv6アドレスを取得するにはどうすればよいですか?

分類Dev

16.04で安定したIPv6アドレスを取得するにはどうすればよいですか?

分類Dev

Angular 6:FormGroupを使用してformControlNameを動的に作成するにはどうすればよいですか?

分類Dev

Angular 6で動的に作成された子コンポーネントのすべての要素を選択するにはどうすればよいですか?

分類Dev

Angular 6で多次元配列を作成して使用するにはどうすればよいですか?

分類Dev

6か月以上前の行を削除するにはどうすればよいですか?ただし、SQLを使用してテーブルに少なくとも100行残っていることを確認してください。

分類Dev

ES6で番号を繰り返さない配列を生成するにはどうすればよいですか?

分類Dev

6ビットを使用して値を格納するにはどうすればよいですか?

分類Dev

mtrを使用してipv6アドレスをtracerouteするにはどうすればよいですか?

分類Dev

Angular 6を使用してLoginComponentを実装するにはどうすればよいですか?

分類Dev

Angular 6のdivにHTMLタグまたは要素を追加するにはどうすればよいですか?

分類Dev

特定の配列で「0〜6」の間の乱数が出力される回数をカウントするにはどうすればよいですか?

分類Dev

定義された型を示唆する型を返すにはどうすればよいですか

分類Dev

MySQL用のEF6Fluent APIを使用してテーブルタイプを指定するにはどうすればよいですか?

分類Dev

MX6SABREデバイスでYoctoで生成されたイメージを起動するにはどうすればよいですか

Related 関連記事

  1. 1

    Angular、RxJs 6、およびInMemoryAPIを使用して、複数の監視可能なソースにネストされているように見える、返されたObservable値を取得するにはどうすればよいですか?

  2. 2

    Angular6の新しいRXJS6パイプ/マップで解決されたデータを返すにはどうすればよいですか?

  3. 3

    Perl6で繰り返されるアイテムで構成されるリストを取得するにはどうすればよいですか?

  4. 4

    C ++で6桁の0が埋め込まれた16進値のみを出力するようにするにはどうすればよいですか?

  5. 5

    Perl 6で印刷したい長い文字列を分割するにはどうすればよいですか?

  6. 6

    Xcode 6でキーボードが表示されたときに表示されないビューを修正するにはどうすればよいですか?

  7. 7

    Entity Framework6が生成されたクエリにORDERBYを追加しないようにするにはどうすればよいですか?

  8. 8

    Canvasで半径内に対称的に間隔を置いて配置された6本の線を描画するにはどうすればよいですか?

  9. 9

    Foundation 6のJavascriptを使用するにはどうすればよいですか?

  10. 10

    Ubuntu LinuxでJVisualvmを使用してTomcat6を監視するにはどうすればよいですか?

  11. 11

    Qt6を使用してQMLでDropShadow効果を作成するにはどうすればよいですか?

  12. 12

    Storyboardを使用してXcode6でUIButton接続を作成するにはどうすればよいですか?

  13. 13

    rxjs6を使用してAngular8でスクロールアニメーションを実装するにはどうすればよいですか?

  14. 14

    JS子コンポーネントを入力せずに、型指定されていないES6反応コンポーネントをTypescriptコンポーネントにインポートするにはどうすればよいですか?

  15. 15

    16.04で安定したIPv6アドレスを取得するにはどうすればよいですか?

  16. 16

    16.04で安定したIPv6アドレスを取得するにはどうすればよいですか?

  17. 17

    Angular 6:FormGroupを使用してformControlNameを動的に作成するにはどうすればよいですか?

  18. 18

    Angular 6で動的に作成された子コンポーネントのすべての要素を選択するにはどうすればよいですか?

  19. 19

    Angular 6で多次元配列を作成して使用するにはどうすればよいですか?

  20. 20

    6か月以上前の行を削除するにはどうすればよいですか?ただし、SQLを使用してテーブルに少なくとも100行残っていることを確認してください。

  21. 21

    ES6で番号を繰り返さない配列を生成するにはどうすればよいですか?

  22. 22

    6ビットを使用して値を格納するにはどうすればよいですか?

  23. 23

    mtrを使用してipv6アドレスをtracerouteするにはどうすればよいですか?

  24. 24

    Angular 6を使用してLoginComponentを実装するにはどうすればよいですか?

  25. 25

    Angular 6のdivにHTMLタグまたは要素を追加するにはどうすればよいですか?

  26. 26

    特定の配列で「0〜6」の間の乱数が出力される回数をカウントするにはどうすればよいですか?

  27. 27

    定義された型を示唆する型を返すにはどうすればよいですか

  28. 28

    MySQL用のEF6Fluent APIを使用してテーブルタイプを指定するにはどうすればよいですか?

  29. 29

    MX6SABREデバイスでYoctoで生成されたイメージを起動するにはどうすればよいですか

ホットタグ

アーカイブ