Ich habe ein Geschäft mit bag
und favorites
. Momentan gibt es eine Aktion zu REMOVE_FROM_BAG
. Dies löst einen Nebeneffekt aus, um den Artikel aus Ihrer Tasche aus der API zu entfernen, der REMOVE_FROM_BAG_COMPLETE
auslöst, der ihn tatsächlich aus dem Geschäft entfernt.Ketteneffekte mit Abhängigkeit vom Ergebnis anderer Effekte
Wir fügen eine Aktion hinzu, MOVE_FROM_BAG_TO_FAVORITES
, die einen Artikel aus bag
entfernen und in favorites
einfügen wird. Wenn der Remove-API-Aufruf fehlschlägt, sollte nichts weiter fortgesetzt werden. Der Gesamtablauf wäre:
MOVE_BAG_TO_FAVORITES
REMOVE_FROM_BAG
@Effect Api Call
REMOVE_FROM_BAG_COMPLETE
ADD_TO_FAVORITES
Wenn also der API-Aufruf fehlschlägt, sollte das Element nicht aus dem Beutel zu speichern oder zu Ihrer Favoriten-Liste entfernt werden.
// 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 }))
);
Wie für den Artikel zu den Favoriten zu bewegen, ich kann es REMOVE_FROM_BAG
als Nebenwirkung auslösen als gut, aber ich bin nicht sicher, wie Sie sicherstellen, wenn die Nebenwirkung erfolgreich ist oder nicht (das heißt, es Kette).
@Effect()
moveFromBagToFavorites = this.actions$
.ofType(MOVE_FROM_BAG_TO_FAVORITES)
.mergeMap(({ payload }) => [
{ type: REMOVE_FROM_BAG, payload },
{ type: ADD_TO_FAVORITES, payload },
]);
In der Theorie sollte diese Arbeit, aber ich bin nicht sicher, wie ADD_TO_FAVORITES
zu verhindern, dass im Fall versandt wird REMOVE_FROM_BAG
schlägt fehl, da der API-Aufruf fehlgeschlagen ist. Gibt es eine bessere Möglichkeit, Aktionen mit Nebenwirkungen zu verketten?
Das würde in Ordnung funktionieren, aber dann müsste ich zwei separate Aktionen erstellen, um die remove API aufzurufen. Ich versuche, dies zu vermeiden und den vorhandenen Remove-Effekt zu verwenden, um die API aufzurufen, sodass sie nur an einer Stelle ausgeführt wird. –
Wenn die beiden Aufrufe die gleichen sind, aber unterschiedliche Auswirkungen haben, würde ich daraus zwei Effektaktionen mit unterschiedlichen Typ-IDs erstellen. Ja, es ist doppelt vorhanden, aber es wird aus verschiedenen Kontexten mit verschiedenen Nebenwirkungen aufgerufen. Ich denke, es ist definitiv klarer. – pixelbits