我试图了解如何解决商店之间的依赖关系。问题是我有一个全面的数据树,需要从服务器获取依赖于另一个的请求链。
问题: waitFor异步请求不应该接缝。假设下一个事件链:
- NEED_A(看
StoreA) - NEED_B(看
StoreB)在这里StoreB做AppDispatcher.waitFor([StoreA.dispatchToken])。但其实我们想等GET_A - SOME_OTHER_ACTION(看
StoreA)
第三步waitFor从第二步中断,因为StoreA.dispatchToken被要求 SOME_OTHER_ACTION。
问题: 等待某些特定动作的真正方法是什么 ( GET_A)?
我们来看一下代码(请注意三个PROBLEM注释):
商店A
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
}
});
商店B
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();
}
});