Flux: waitFor specific event
Ich versuche zu verstehen, wie man Abhängigkeiten zwischen Geschäften auflöst. Das Problem ist, dass ich einen umfassenden Datenbaum habe, der mit der von einander abhängigen Anforderungskette vom Server abgerufen werden muss.
PROBLEM waitFor
-Nähte, die nicht für asynchrone Anforderungen gedacht sind. Angenommen, die nächste Ereigniskette lautet:
StoreA
)NEED_B (sieheStoreB
) HierStoreB
tunAppDispatcher.waitFor([StoreA.dispatchToken])
. Aber eigentlich wollen wir auf @ wartGET_A
SOME_OTHER_ACTION (sieheStoreA
)Der dritte Schritt brichtwaitFor
vom zweiten Schritt seitStoreA.dispatchToken
wurde für @ aufgerufSOME_OTHER_ACTION
.
Frage Was ist eine echte Möglichkeit, auf eine bestimmte Aktion zu warten GET_A
)?
Werfen wir einen Blick auf den Code (bitte beachten Sie dreiPROBLEM
Bemerkungen)
StoreA
var a = [];
var StoreA = assign({}, EventEmitter.prototype, {
getAProps: () => copyOfAProps(a);
asyncGetA: () => ... //Async request returns Promise
});
StoreA.dispatchToken = AppDispatcher.register((action) => {
switch(action.type) {
NEED_A:
StoreA.asyncGetA().then((data) => {
ActionCreator.getA(data); //Dispatches GET_A event
});
break;
GET_A:
a = action.data;
StoreA.emitChange();
SOME_OTHER_ACTION:
//do whatever
}
});
StoreB
var b = [];
var StoreB = assign({}, EventEmitter.prototype, {
// PROBLEM: this request depends on data fetched from StoreA.asyncGetA
asyncGetB: (A) => ...
});
StoreB.dispatchToken = AppDispatcher.register((action) => {
switch(action.type) {
//PROBLEM: NEED_B may happen before GET_A
NEED_B:
//PROBLEM: As I understand waitFor doesn't work here
AppDispatcher.waitFor([StoreA.dispatchToken]);
StoreB.asyncGetB(StoreA.getAProps()).then((data) => {
ActionCreator.getB(data);
});
GET_B:
b = action.data;
StoreB.emitChange();
}
});