Wie gehen Sie mit asynchronen Fehlern in Flux um?

8

Ich habe mit Flux gearbeitet und es macht mir wirklich Spaß, aber ich habe einen Punkt, an dem ich nicht einschätzen kann, was die beste Lösung wäre. Ich habe eine App erstellt, die eine Liste von Bestellungen bearbeitet, und jede Bestellung in der Liste ist in verschiedene Komponenten unterteilt, die den Lese- / Bearbeitungsmodus haben (im Grunde zu einem kleinen Formular wechseln) und ein Update auslösen (Liste der Produkte in der Bestellung, Versand) Kosten usw.).

Alles funktioniert gut, außer für den Fall, dass ich Ausnahmen vom Server bei der Auftragsaktualisierung behandeln muss (zB hat der Benutzer eine der Produktmengen geändert, aber es sind nicht genug auf Lager, ich möchte, dass die Komponente das Formular dafür anzeigt Produkt für diese spezifische Reihenfolge zeigen eine Inline-Nachricht, so muss ich die Fehlermeldung an eine sehr spezifische Komponente liefern.Die Liste kann bis zu 50 Bestellungen haben und jede Bestellung besteht aus 4-5 Komponenten, die das Update auslösen können, also Ich kann ungefähr 200 Komponenten haben, die potenziell an einer ORDER_UPDATE_FAILED Aktion interessiert sein könnten.

Die einzigen zwei Möglichkeiten, über die ich nachdenken kann, sind:

  1. Veranlassen Sie, dass die Komponente das API-Update synchron aufruft, damit sie den Fehler abrufen kann (der aktualisierte Auftrag wird als Nutzlast einer ORDER_UPDATED-Aktion gesendet und fließt durch den normalen Flux-Fluss: Dispatcher, Store, Trigger Update). Aber ich weiß, dass das ein bisschen die Flux-Philosophie bricht
  2. Nehmen Sie die Aktualisierung asynchron vor und erstellen Sie eine ORDER_UPDATE_FAILED, und den Store mit der Logik zum Einfügen der Transformation in den Fehler in einem Objekt, das durch eine Auftragsteilkomponente identifiziert werden kann (über orderID + errorID nachdenken). Dies würde den unidirektionalen Zyklus der Daten und die Asynchronität der Aktionen beibehalten, aber es fühlt sich zu komplex und umständlich an und fügt einige weitere Probleme hinzu:

    a) Wenn der Fehler im Store gespeichert wird, muss die Komponente den Speicher benachrichtigen, wenn der Fehler nicht mehr gültig ist, was möglicherweise nicht immer möglich ist.)

    b) Wenn der Benutzer auf Speichern klickt, ohne einen Wert zu ändern, und die Komponente sich im "Ladezustand" befindet, bleibt der Befehl selbst bei erfolgreichem Aufruf derselbe, so dass er nicht aus dem "Ladezustand" herauskommt.

Hat jemand einen eleganteren Weg gefunden, um dieses Problem zu lösen?

    
jasalguero 14.02.2015, 23:05
quelle

1 Antwort

3

Ich denke, die Option 1 macht Sinn und ist einfacher, so lange zu verwalten, wie der Fehler ist nur relevant, im Rahmen dieser Komponente . Ich habe diesen Ansatz unter Verwendung von für Dinge wie Benutzerregistrierung Fehler auf Formularübermittlung anzuzeigen, wo ich den einzigen Ort, weiß, dass ich die Fehlermeldung auf dem Formular direkt ist benötigen ( „Dieser Benutzername ist bereits vergeben“). Ich sehe diese Art von Fehlermeldung als Teil der Form / Komponente selbst, mehr lokalen Status als Anwendungsstatus. Das klingt sehr nach Ihrer Situation, also würde ich sagen, dass dies die bessere Option ist.

Option 2 wäre robuster zu der Möglichkeit, dass der Fehler in mehr als ein Ort in der Zukunft relevant werden könnte. Aber wenn Sie sicher sind, dass dies unwahrscheinlich ist, ich habe nicht den Vorteil der erhöhten Komplexität sehen im Vergleich zu Option 1.

    
Adam Stone 15.02.2015 23:03
quelle

Tags und Links