私はダイアログを開いてダイアログ内のフォームコントロールのデータをプリロードするアクションを送出します。アクションは、元のアクションに渡された配列内の各id
のデータをプリロードする新しいアクションの配列を戻すエフェクトによってピックアップされます。mergeMapは以前のHTTP呼び出しをキャンセルします
@Effect()
preloadReferenceData$ = this.actions$
.ofType(PRELOAD_REFDATA)
.pipe(
map((action: PreloadRefData) => action.payload),
mergeMap(ids => {
const actions: Action[] = [];
ids.forEach((id) => actions.push(new LoadRefDataForId(id)));
return actions;
})
);
通常、私はこれは私が同じタイプの複数のアクションを派遣しています初めてです、そしてそれは私が経験したのは初めてだが、効果から複数の新しいアクションを成功裏に派遣するmergeMap
演算子を使用しますXHRの呼び出しがキャンセルされることがあります。私はmergeMap
を使用したときにXHR呼び出しがキャンセルされた場合にswitchMap
の使用を疑ったでしょう。
これら
はactions
LoadRefDataForId {payload: "2441", type: "[Refdata] Load RefData"}
LoadRefDataForId {payload: "7612", type: "[Refdata] Load RefData"}
LoadRefDataForId {payload: "9411", type: "[Refdata] Load RefData"}
の含有量であり、これは、ネットワークログ
@Effect()
loadRefDataForId$ = this.actions$
.ofType(LOAD_REFDATA_FOR_ID)
.pipe(
map((action: LoadRefDataForId) => action.payload),
switchMap((id) => this.service.loadRefData(id)
.pipe(
map((occupations) => {
return new LoadRefDataForIdSuccessful({ id: id, occupations: occupations } as RefDataPayload);
}),
catchError((err, caught) => {
console.log(caught);
return caught;
})
))
);
がなぜLoadRefDataForId
アクションを処理効果から取られますt XHRは、私がmergeMap
を使っていてもキャンセルしましたか?解約は、この効果によって引き起こされる
あなたがLoadRefDataForIdアクションを扱う効果のためのコードを追加することはできますか?この1つは要求の任意の並べ替えを送信することを担当していません –
@ Jota.Toledoコードを追加しました!私は 'switchMap'を' mergeMap'に変更してみましたが、それはすべて機能しますが、なぜそれが理解できません。マージされた3つの独立したオブザーバブルが存在せず、それらの中の 'switchMap'の使用は、その特定のストリームにのみ影響を及ぼすべきですか? –
なぜ閉じるフラグ?はい、それは「なぜこのコードは動作しないのですか?」という質問ですが、大きな違いがありますが、どうやって、どうやって、そしてなぜそれがうまくいくのか、最後には推論の質問があります。 –