約束からアクションをトリガーするNgRx8エフェクトを作成するにはどうすればよいですか

DevMike

NgRx効果を把握するのに苦労しています。

最新リリースのバージョン8を使用して、オブザーバブルとプロミスを組み合わせた次のエフェクトを作成しましたが、正しく作成する方法を理解するのに苦労しています。

これは考えられるすべてのエラーをキャッチすることが保証されていますか?

authLogin$ = createEffect(() => this.actions$.pipe(
    ofType(AuthActions.authLogin),
    switchMap(async(action) => {
      try {
        const userState = await this.loginService.login(action.username, action.password);
        return AuthActions.authSuccess(userState);
      }
      catch (error) {
        return AuthActions.authLoginError({
          error: error
        });
      }
    })
  ),{ resubscribeOnError: false });

また、この構成の最後のビットを使用する必要があるかどうかも明確ではありません{ resubscribeOnError: false }。これは、後続の実行でまったく新しいオブザーバブルが作成されることを意味しますか?

より良いアプローチはありますか?

JoãoGhignatti

これでtry catchすべてのエラー.then().catch()が検出されるかどうかはわかりません。Promiseのみを表示したためですが、このPromiseをObservableに変換してみませんか?それはあなたpipeが書くことと適切に書くことをより簡単にするでしょう

を使用してswitchMap、PromiseからObservableを返します。

import {from} from 'rxjs';

...
switchMap(action => from(this.loginService.login(action.username, action.password)))
...

その後、catchErrorRxJからのObservable演算子を使用できます。エラーと、caught監視可能なソースであると呼ばれるプロパティを受け取りますここのドキュメントから)。どこのことができます

...
catchError((err, caught$) => {
  this.store.dispatch(new AuthActions.authLoginError({ error: error }));
  return caught$;
})
...

return caught$あなたは、エラーが発生した場合死ぬから、あなたの影響を防ぐための重要な原因です。NgRx 8でそのように処理する必要はなく、簡単にできます。

...
catchError((err, caught$) => {
  return of(new AuthActions.authLoginError({ error: error })));
})
...

ただし、{ resubscribeOnError: true }(デフォルト値である)が必要になりますこれは、エラーを処理しない場合にエフェクトを再サブスクライブする機能であり、もう一度エフェクトが死ぬのを防ぎます。

そしてcatchError、あなたの後に、あなたはmapこのように成功に戻るのを簡単にすることができます

...
map(userState => new AuthActions.authSuccess(userState))

したがって、完成したコードは次のようになります

authLogin$ = createEffect(() => this.actions$.pipe(
  ofType(AuthActions.authLogin),
  switchMap(action => from(this.loginService.login(action.username, action.password))),
  catchError((err, caught$) => of(new AuthActions.authLoginError({ error: error })))),
  map(userState => new AuthActions.authSuccess(userState))
)); // no resubscribeOnError since default value is true

サービスコールにObservableを利用し、責任を分離するオペレーターがいて、NgRxを満足させるので、これはより良いアプローチだと思います。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

シェルスクリプトからネイティブアプリケーションを作成するにはどうすればよいですか?

分類Dev

シェルスクリプトからネイティブアプリケーションを作成するにはどうすればよいですか?

分類Dev

アソシエーションクラスをナビゲートしてOCLで制約を作成するにはどうすればよいですか?

分類Dev

GitHubアクション:マージされたかのようにプルリクエストを作成するにはどうすればよいですか?

分類Dev

asp.net mvcチェックボックスでアクションをトリガーするにはどうすればよいですか?

分類Dev

DismissibleのonDismissed()アクションがトリガーされる前にアクションを追加するにはどうすればよいですか?

分類Dev

readystatechangeでAJAXリクエストを約束するにはどうすればよいですか?

分類Dev

ミューテーションクエリからApolloデータストア/キャッシュを更新するにはどうすればよいですか?更新オプションがトリガーされないようです

分類Dev

状態を現在と同じに更新するアクションがディスパッチされたときにエフェクトをトリガーするにはどうすればよいですか?

分類Dev

複数のトリガーでAzureロジックアプリケーションをトリガーするにはどうすればよいですか?

分類Dev

Javascriptでボタンをクリックせずにアクションをトリガーするにはどうすればよいですか?

分類Dev

オブジェクトのオプションのキーを使用してクエリを作成するにはどうすればよいですか?

分類Dev

Androidアプリケーションからevernoteで新しいノートブックを作成するにはどうすればよいですか?

分類Dev

シリアライザーを使用してオブジェクトからjsonファイルを作成するにはどうすればよいですか?

分類Dev

シェルスクリプトを使用して回転アニメーションを作成するにはどうすればよいですか?

分類Dev

デフォルトのフォームエラーをアクションで再作成するにはどうすればよいですか?

分類Dev

Lotus Domino Designerのフォームのアクションから応答ドキュメントを作成するにはどうすればよいですか?

分類Dev

Aフレームでクリックイベントをトリガーするたびに関連するアニメーションをトリガーするにはどうすればよいですか?

分類Dev

アソシエーションを追加しながら複数のオブジェクトを構築するにはどうすればよいですか?

分類Dev

更新アクションのフォームオブジェクトを作成するにはどうすればよいですか?

分類Dev

シェルスクリプト内でアニメーションを作成するにはどうすればよいですか?

分類Dev

three.js / editorのスクリプトからアニメーションを作成または参照するにはどうすればよいですか?

分類Dev

シェルスクリプトでソフトウェアバージョンを確認するにはどうすればよいですか?

分類Dev

シェルスクリプトでソフトウェアバージョンを確認するにはどうすればよいですか?

分類Dev

ツリートップでアクショントリガーをコーディングするにはどうすればよいですか?

分類Dev

制約されたジェネリック型を持つアクションデリゲートをC#のタイプセーフコレクションに格納するにはどうすればよいですか?

分類Dev

ngrxがアクションに成功した後、フォームをクリーンアップするにはどうすればよいですか?

分類Dev

ソリューションエクスプローラーでテキストファイルを作成するにはどうすればよいですか?

分類Dev

スクロールトップを使用してCSSでアニメーションをトリガーするにはどうすればよいですか?

Related 関連記事

  1. 1

    シェルスクリプトからネイティブアプリケーションを作成するにはどうすればよいですか?

  2. 2

    シェルスクリプトからネイティブアプリケーションを作成するにはどうすればよいですか?

  3. 3

    アソシエーションクラスをナビゲートしてOCLで制約を作成するにはどうすればよいですか?

  4. 4

    GitHubアクション:マージされたかのようにプルリクエストを作成するにはどうすればよいですか?

  5. 5

    asp.net mvcチェックボックスでアクションをトリガーするにはどうすればよいですか?

  6. 6

    DismissibleのonDismissed()アクションがトリガーされる前にアクションを追加するにはどうすればよいですか?

  7. 7

    readystatechangeでAJAXリクエストを約束するにはどうすればよいですか?

  8. 8

    ミューテーションクエリからApolloデータストア/キャッシュを更新するにはどうすればよいですか?更新オプションがトリガーされないようです

  9. 9

    状態を現在と同じに更新するアクションがディスパッチされたときにエフェクトをトリガーするにはどうすればよいですか?

  10. 10

    複数のトリガーでAzureロジックアプリケーションをトリガーするにはどうすればよいですか?

  11. 11

    Javascriptでボタンをクリックせずにアクションをトリガーするにはどうすればよいですか?

  12. 12

    オブジェクトのオプションのキーを使用してクエリを作成するにはどうすればよいですか?

  13. 13

    Androidアプリケーションからevernoteで新しいノートブックを作成するにはどうすればよいですか?

  14. 14

    シリアライザーを使用してオブジェクトからjsonファイルを作成するにはどうすればよいですか?

  15. 15

    シェルスクリプトを使用して回転アニメーションを作成するにはどうすればよいですか?

  16. 16

    デフォルトのフォームエラーをアクションで再作成するにはどうすればよいですか?

  17. 17

    Lotus Domino Designerのフォームのアクションから応答ドキュメントを作成するにはどうすればよいですか?

  18. 18

    Aフレームでクリックイベントをトリガーするたびに関連するアニメーションをトリガーするにはどうすればよいですか?

  19. 19

    アソシエーションを追加しながら複数のオブジェクトを構築するにはどうすればよいですか?

  20. 20

    更新アクションのフォームオブジェクトを作成するにはどうすればよいですか?

  21. 21

    シェルスクリプト内でアニメーションを作成するにはどうすればよいですか?

  22. 22

    three.js / editorのスクリプトからアニメーションを作成または参照するにはどうすればよいですか?

  23. 23

    シェルスクリプトでソフトウェアバージョンを確認するにはどうすればよいですか?

  24. 24

    シェルスクリプトでソフトウェアバージョンを確認するにはどうすればよいですか?

  25. 25

    ツリートップでアクショントリガーをコーディングするにはどうすればよいですか?

  26. 26

    制約されたジェネリック型を持つアクションデリゲートをC#のタイプセーフコレクションに格納するにはどうすればよいですか?

  27. 27

    ngrxがアクションに成功した後、フォームをクリーンアップするにはどうすればよいですか?

  28. 28

    ソリューションエクスプローラーでテキストファイルを作成するにはどうすればよいですか?

  29. 29

    スクロールトップを使用してCSSでアニメーションをトリガーするにはどうすればよいですか?

ホットタグ

アーカイブ