Поток: ожидание определенного события

Я пытаюсь понять, как разрешить зависимости между магазинами. Проблема в том, что у меня есть всеобъемлющее дерево данных, которое нужно получать с сервера с цепочкой запросов, которые зависят друг от друга.

ПРОБЛЕМА: waitFor швы не должны быть предназначены для асинхронных запросов. Предположим, следующая цепочка событий:

NEED_A (посмотрите наStoreA)NEED_B (посмотрите наStoreB) ВотStoreB делатьAppDispatcher.waitFor([StoreA.dispatchToken]), Но на самом деле мы хотим ждатьGET_ASOME_OTHER_ACTION (посмотрите наStoreA)

Третий шаг ломаетсяwaitFor со второго шага сStoreA.dispatchToken был призванSOME_OTHER_ACTION.

Вопрос: Какой верный способ ждать какого-то конкретного действия (GET_A)?

Давайте посмотрим на код (обратите внимание на триPROBLEM Комментарии):

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();
  }
});

Ответы на вопрос(1)

Ваш ответ на вопрос