Ich verwende Flux, React und ich habe die Komponenten Simple und Messages:
jqXHR.done()
. Einfach einen Change-Listener haben, um den Versand des Ergebnisses abzuwarten. Wenn das Ergebnis null ist, möchte ich einen Fehler mit meiner Nachrichten-Komponente anzeigen, also rufe ich mein MessagesAction.addError('My result is null')
. Das Problem tritt auf, wenn ich das Null-Ergebnis erhalte und sofort MessagesAction.addError
in der Simple-Komponente aufruft. In der Tat, ich weiß, dass dies zu " Versand mitten in einem Versand " -Fehler führen kann, aber ich weiß nicht, wie diesen Code umgestalten, um die Fehlermeldung mit Flux anzuzeigen.
Haftungsausschluss 1 : Ich kann setTimeout
function nicht verwenden, um dieses Problem zu lösen. Dies ist nicht die richtige Lösung.
Haftungsausschluss 2 : Die Simple
-Komponente repräsentiert jede andere Komponente aus der App, die eine Nachricht auch über die Nachrichten-Komponente anzeigt.
Einfacher Code:
%Vor%Nachrichtencode:
%Vor%Danke!
Nun, das Problem ist, dass (zumindest in der Dispatcher-Implementierung von Facebook) keine Aktion innerhalb der Speicherrückrufe ausgelöst werden muss, was zu unerwünschtem / unvorhersehbarem Verhalten führen würde, wie unendliches Dispatching oder inkonsistente Zustandsänderungen (zB Race Conditions) . Dies liegt an der Natur eines einzelnen Sende-Dispatchers.
Die sauberste Lösung des IMHO (ohne Riechen waitFor()
) besteht darin, einen internen Zustand in die auslösende Komponente einzuführen. Mit dem Status triggern Sie Ihre Nachrichtenaktion im nächsten Aktualisierungszyklus. Auf diese Weise haben Sie nicht das Problem nicht fertiggestellter Versandzyklen.
Ihr Top-Level-Container sollte auf Änderungen sowohl im UserStore als auch im MessageStore warten.
Der MessageStore sollte den Benutzerspeicher "warten", seinen Status ableiten (d. h. seine Nachrichteneigenschaft aktualisieren) und anschließend eine Änderung ausgeben.
In etwa so: Top UserContainer-Komponente
%Vor%