ngrxストアのselectからエラーを取得するにはどうすればよいですか?

ズルカス

ストアで使用できるアクションがいくつかあるとしましょう:Load、LoadFail、LoadSuccess。すべての私の行動は非常に単純です、LOAD = "load"LOAD_FAIL = "load failed"、とLOAD_SUCCESS = "load success"私はそうのように、これらのスイッチを簡単な減速を持っています。

export function reducer(state: State = initialState, action: Actions): State {
    switch (action.type) {
        case Actions.LOAD: {
            console.log("Actions.LOAD");
            return state;
        }
        case Actions.LOAD_FAIL: {
            console.log("Actions.LOAD_FAIL");
            store.error = action.payload;
            return state;
        }
        case Actions.LOAD_SUCCESS: {
            console.log("Actions.LOAD_SUCCESS");
            state.data = action.payload;
            return state;
        }
        default: {
            return state;
        }
    }
}

ロードディスパッチを処理するエフェクトクラスがあります。

@Injectable()
export class TestersEffects {
    constructor(
        private service: MyHttpService,
        private actions$: Actions
    ) {}

    @Effect() load$ = this.actions$.pipe(
        ofType(Actions.LOAD),
        switchMap(
            action => {
                return this.service.load().pipe(
                    map(data => {
                        console.log("load$ fired");
                        return new TestersActions.LoadSuccess(data);
                    }),
                    catchError(error => {
                        console.log("error");
                        return of (new Actions.LoadFail(error));
                    })
                )
            }
        )
    );
}

最後に、私はこれらすべてをそのように使用しています:

export class MyClass implements OnInit {
    data: any;

    constructor(private store: Store<AppState>) {}

    ngOnInit() {
        this.store.dispatch(new Actions.Load());
        this.store.select(store => store.State).subscribe(
            data => this.data = data,
            error => this.handleError(error)
        );
    }

    handleError(error) {
        //Whatever I'll do to handle this error
    }
}

このコードは、要求しているサーバーが応答するときに正常に機能します。ただし、応答しない状況に対処する必要があります。エラーを取得する方法を完全に理解するのに十分なngrx / storeのフローを理解していないだけだと思いますが、途方に暮れています。コードをデバッグするcatchErrorと、エフェクトクラスinが起動してLoadFailアクションを送信し、レデューサーがアクションをキャッチしてエラーを設定し、状態を返します。ただし、サブスクリプション側ではMyClass、何も表示されません。私はここで重要な何かを見逃しているに違いないと思いますが、グーグルの専門知識はすべて私を手ぶらで残し、スタックオーバーフローに勇敢に立ち向かい、その問題についての知恵を請うと思いました。

tl; dr:サーバーが応答するとき、私のストアは問題なく動作しますが、応答しないとき、私のエラーは、監視可能なストア状態のサブスクリプションに送信されません。

ズルカス

私はそれを考え出した。私はそれを類推して、それからそれを技術的に説明するつもりです。

すべての車と同じように、独自のVINを備えた特定の車があるとします。その車には、人々が座ることができるいくつかの座席があります。車が到着したとき、あなたは車の中にいる人々だけを本当に気にし、必ずしも車自体を気にしません。基本的に、私の元の例で起こっていることは、それが新しい人ではなく、新しい車であるかどうかを確認しているようだったということです。そのため、システムを機能させるためには、車ではなく人をチェックする必要がありました。

だからそれの技術。2つのオブジェクトを比較するときに、それらの参照が同じでない場合、それらに含まれるデータに関係なく、それらは同じオブジェクトではありません。私の場合、状態オブジェクトの変化を観察したかったのです。これが機能しなかった理由は、内部データが変更されたにもかかわらず、状態オブジェクトの参照が変更されなかったためです。では、どのように修正しましたか?さて、それについて行くには2つの方法があります。状態オブジェクト自体の変更を引き続き監視する場合は、提供する新しいデータを使用して、レデューサーでオブジェクトを再割り当てする必要があります。それ以外の場合、変更/エラーのみを監視する場合は、監視する各変数を監視する必要があります。

基本的に、これは次のようになります。

interface Person {
    name: string;
    id: number;
}

function comparePeople() {
    var p1: Person = { name: "John", id: 1 }
    var p2: Person = { name: "James", id: 2 }
    var p3: Person = { name: "John", id: 1 }

    console.log(`p1 === p1 ? ${p1 === p1});
    console.log(`p1 === p2 ? ${p1 === p2});
    console.log(`p1 === p3 ? ${p1 === p3});
}

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

Java Spring Bootのリクエストのヘッダーからベアラートークンを取得するにはどうすればよいですか?

分類Dev

ngrx-router-storeを使用してngrxエフェクト内のルートパラメータを取得するにはどうすればよいですか?

分類Dev

ngrxストアからテンプレートに値を取得するにはどうすればよいですか?

分類Dev

サーバー[DF-AA-33]から情報を取得する際のエラーとはどういう意味ですか?このエラーを解決するにはどうすればよいですか?Google Playストア?

分類Dev

ExpressサーバーでReactクライアントアプリからリクエストを取得するにはどうすればよいですか?

分類Dev

SpringコントローラーからAOPアドバイスでRequestMappingリクエストを取得するにはどうすればよいですか?

分類Dev

Actix-webのHTMLフォームからPOSTリクエストからパラメータを取得するにはどうすればよいですか?

分類Dev

Bigqueryクライアントのinsert_rows_from_dataframeメソッドからのみエラーを取得するにはどうすればよいですか?

分類Dev

リクエストからすべてのクエリ文字列パラメータを取得するにはどうすればよいですか?

分類Dev

Angular 2のngrxエフェクトのパラメーターにアクセスするにはどうすればよいですか?

分類Dev

haproxy dockerコンテナ内のリクエストからクライアントIPを取得するにはどうすればよいですか?

分類Dev

SpringでWebRequestからリクエストのURIを取得するにはどうすればよいですか?

分類Dev

AJVエラーから「タイトル」を取得するにはどうすればよいですか?

分類Dev

特定のAWSPowershellコマンドレット/エイリアスからすべてのデータを取得するにはどうすればよいですか?

分類Dev

クライアントリクエストからFlaskのURLにすべてのデータを印刷するにはどうすればよいですか?

分類Dev

Googleデータストアからデータを取得するにはどうすればよいですか?

分類Dev

sqlite create_functionからエラーの種類を取得するにはどうすればよいですか?

分類Dev

アラートから入力を取得するにはどうすればよいですか?

分類Dev

クライアントから現在のDateTimeを取得するにはどうすればよいですか?

分類Dev

このリクエストからPOST値を取得するにはどうすればよいですか?

分類Dev

このリクエストから属性を取得するにはどうすればよいですか?

分類Dev

SwiftのWKWebViewからPOSTリクエスト本文を取得するにはどうすればよいですか?

分類Dev

このXMLリクエストから日付を取得するにはどうすればよいですか?

分類Dev

clojure先物のエラーからスタックトレースを取得するにはどうすればよいですか?

分類Dev

Struts2 / ServletのApacheWebサーバーからクライアントIPアドレスを取得するにはどうすればよいですか?

分類Dev

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

分類Dev

ビューからコントローラーの「ActionResult」に「<select> </ select>」の値を取得するにはどうすればよいですか?

分類Dev

Firebaseリアルタイムデータベースから最新のエントリを取得するにはどうすればよいですか?

分類Dev

アンカータグからテキストを取得するにはどうすればよいですか?

Related 関連記事

  1. 1

    Java Spring Bootのリクエストのヘッダーからベアラートークンを取得するにはどうすればよいですか?

  2. 2

    ngrx-router-storeを使用してngrxエフェクト内のルートパラメータを取得するにはどうすればよいですか?

  3. 3

    ngrxストアからテンプレートに値を取得するにはどうすればよいですか?

  4. 4

    サーバー[DF-AA-33]から情報を取得する際のエラーとはどういう意味ですか?このエラーを解決するにはどうすればよいですか?Google Playストア?

  5. 5

    ExpressサーバーでReactクライアントアプリからリクエストを取得するにはどうすればよいですか?

  6. 6

    SpringコントローラーからAOPアドバイスでRequestMappingリクエストを取得するにはどうすればよいですか?

  7. 7

    Actix-webのHTMLフォームからPOSTリクエストからパラメータを取得するにはどうすればよいですか?

  8. 8

    Bigqueryクライアントのinsert_rows_from_dataframeメソッドからのみエラーを取得するにはどうすればよいですか?

  9. 9

    リクエストからすべてのクエリ文字列パラメータを取得するにはどうすればよいですか?

  10. 10

    Angular 2のngrxエフェクトのパラメーターにアクセスするにはどうすればよいですか?

  11. 11

    haproxy dockerコンテナ内のリクエストからクライアントIPを取得するにはどうすればよいですか?

  12. 12

    SpringでWebRequestからリクエストのURIを取得するにはどうすればよいですか?

  13. 13

    AJVエラーから「タイトル」を取得するにはどうすればよいですか?

  14. 14

    特定のAWSPowershellコマンドレット/エイリアスからすべてのデータを取得するにはどうすればよいですか?

  15. 15

    クライアントリクエストからFlaskのURLにすべてのデータを印刷するにはどうすればよいですか?

  16. 16

    Googleデータストアからデータを取得するにはどうすればよいですか?

  17. 17

    sqlite create_functionからエラーの種類を取得するにはどうすればよいですか?

  18. 18

    アラートから入力を取得するにはどうすればよいですか?

  19. 19

    クライアントから現在のDateTimeを取得するにはどうすればよいですか?

  20. 20

    このリクエストからPOST値を取得するにはどうすればよいですか?

  21. 21

    このリクエストから属性を取得するにはどうすればよいですか?

  22. 22

    SwiftのWKWebViewからPOSTリクエスト本文を取得するにはどうすればよいですか?

  23. 23

    このXMLリクエストから日付を取得するにはどうすればよいですか?

  24. 24

    clojure先物のエラーからスタックトレースを取得するにはどうすればよいですか?

  25. 25

    Struts2 / ServletのApacheWebサーバーからクライアントIPアドレスを取得するにはどうすればよいですか?

  26. 26

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

  27. 27

    ビューからコントローラーの「ActionResult」に「<select> </ select>」の値を取得するにはどうすればよいですか?

  28. 28

    Firebaseリアルタイムデータベースから最新のエントリを取得するにはどうすればよいですか?

  29. 29

    アンカータグからテキストを取得するにはどうすればよいですか?

ホットタグ

アーカイブ