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:

NEED_A (sieheStoreA)NEED_B (sieheStoreB) HierStoreB tunAppDispatcher.waitFor([StoreA.dispatchToken]). Aber eigentlich wollen wir auf @ wartGET_ASOME_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();
  }
});

Antworten auf die Frage(2)

Ihre Antwort auf die Frage