私はbag
とfavorites
の店を持っています。現在、アクションはREMOVE_FROM_BAG
です。これにより、APIからバッグからアイテムを削除する副作用が発生し、REMOVE_FROM_BAG_COMPLETE
が実際にストアから削除されます。他の効果の結果に依存するチェーン効果
MOVE_FROM_BAG_TO_FAVORITES
という項目を追加して、bag
から項目を削除し、favorites
に入れます。 remove API呼び出しが失敗した場合は、何も続行しないでください。全体的な流れは次のようになります。APIコールが失敗した場合
MOVE_BAG_TO_FAVORITES
REMOVE_FROM_BAG
@Effect Api Call
REMOVE_FROM_BAG_COMPLETE
ADD_TO_FAVORITES
したがって、アイテムはバッグストアから削除したり、お気に入りリストに追加するべきではありません。お気に入りにアイテムを移動するためとして
// REMOVE_FROM_BAG side effect; API call; success removes item from the store
@Effect()
removeFromBag = this.actions$
.ofType(REMOVE_FROM_BAG)
.switchMap(({ payload }) => this.bagService.remove(payload)
.map(() => ({ type: REMOVE_FROM_BAG_COMPLETE, payload })
.catch(() => of({type: REMOVE_FROM_BAG_FAIL }))
);
、私はそれは同様に副作用としてREMOVE_FROM_BAG
をトリガすることができますが、副作用は(すなわち、それをチェーン)成功したかどうかは確認してくださいするかどうかはわかりません。
@Effect()
moveFromBagToFavorites = this.actions$
.ofType(MOVE_FROM_BAG_TO_FAVORITES)
.mergeMap(({ payload }) => [
{ type: REMOVE_FROM_BAG, payload },
{ type: ADD_TO_FAVORITES, payload },
]);
は、理論的には、これは動作するはずですが、私はAPIの呼び出しが失敗したため、REMOVE_FROM_BAG
が失敗した場合に派遣されることからADD_TO_FAVORITES
を防ぐするかどうかはわかりません。副作用のある行動を連鎖させるより良い方法はありますか?
これは問題なく動作しますが、削除APIを呼び出すためにディスパッチする2つの別個のアクションを作成する必要があります。私はこれを避け、既存の削除エフェクトを使用してAPIを呼び出して、1つの場所でのみ実行するようにしています。 –
2つの呼び出しが同じで、異なる効果がある場合は、異なるタイプIDを持つ2つのエフェクトアクションを作成します。はい、それは重複していますが、異なるコンテキストから呼び出され、異なる副作用を伴います。私はそれがはっきりとはっきりしていると思う。 – pixelbits