Ein Kollege und ich haben einen Redux beobachtbaren Fluss zu unserer Android-Anwendung hinzugefügt und können nicht herausfinden, wie man ein Epic erstellt, das den Empfang von Aktionen bis zum Abschluss des ersten Aufrufs stoppt.Epic, die Aktion ignoriert, bis die erste Anfrage abgeschlossen ist
Ursprünglich dachte ich, wir könnten skipUntil()
verwenden, aber dann festgestellt, dass das Ergebnis von skipUntil()
geschluckt und nie an den Rest der Kette weitergegeben wird.
Unten ist ein grober JS-Code, der zeigt, was wir zu erreichen hoffen.
const fetchUserEpic = action$ =>
action$.ofType(FETCH_USER)
.skipUntil(/* first request completes */)
.mergeMap(action =>
ajax.getJSON(`/api/users/${action.payload}`)
.map(response => fetchUserFulfilled(response))
.takeUntil(action$.ofType(FETCH_USER_CANCELLED))
);
Es ist fast wie ich einen skipMap()
Betreiber benötigen, die wie switchMap()
wirkt aber ehrt nur eine Anforderung zu einem Zeitpunkt, während alle Elemente nicht berücksichtigt werden, wenn eine beobachtbare ist noch nicht abgeschlossen.
Vielen Dank für Anregungen.
Danke. Ich werde es versuchen. Der Anwendungsfall, an den wir denken, ist, wenn der Benutzer schnell auf eine Senden-Schaltfläche klickt oder versucht, Daten zu aktualisieren, bevor die ursprüngliche Antwort die Chance hatte, zurückzukehren. – jachenry
Vielleicht deaktivieren Sie die Schaltfläche Senden, während die Anfrage inflight ist eine bessere/sicherere Option (basierend auf dem Zustand, in FETCH_USER gesetzt, zurückgesetzt in FETCH_FULLFILLED/CANCELLED) – Gluck