Je viens de commencer à utiliser Redux-Observable. Je veux faire une épopée générique qui demande des données du serveur. Je souhaite que plusieurs requêtes avec la même action et l'identifiant soient débattues. Cependant, je ne suis pas sûr de savoir comment faire cela sans créer plusieurs épopées.Générique Epic utilisant Redux-Observable
const TYPE_IFEXISTS_REQUEST = 'IFEXISTS_REQUEST';
export const IFEXISTS_REQUEST = (id, value) =>
({ type: TYPE_IFEXISTS_REQUEST, id, value });
export const IFEXISTS_EPIC = action$ =>
action$
.ofType(TYPE_IFEXISTS_REQUEST)
.debounceTime(5000) // ERROR: debounces based on action type and not id
.mergeMap(action =>
fromPromise(api.get(`/api/exists/${action.id}/${action.value}`))
.map(({ data }) => IFEXISTS_SUCCESS(action.id, data))
.catch(() => of(IFEXISTS_FAILURE(action.id, 'Server error'))));
Comment est-il possible de créer une épopée générique qui se base sur l'action et l'identifiant?
Mise à jour: Je n'ai jamais entendu parler de GroupBy. Cela a bien fonctionné avec switchMap. Ce qui suit a été utilisé.
action$
.ofType(TYPE_IFEXISTS_REQUEST)
.groupBy(action => action.id)
.mergeMap(actionByIdGroup$ =>
actionByIdGroup$
.debounceTime(5000) // debounces based on action id
.switchMap(action =>
fromPromise(api.get(`/api/exists/${action.id}/${action.value}`))
.map(({ data }) => IFEXISTS_SUCCESS(action.id, data))
.catch(() => of(IFEXISTS_FAILURE(action.id, 'Server error')))
);
)