【发布时间】:2015-12-08 20:20:05
【问题描述】:
我试图了解如何解决商店之间的依赖关系。问题是我有一个全面的数据树,它需要从服务器中获取,请求链依赖于另一个。
问题: 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)?
我们看一下代码(请注意三个PROBLEMcmets):
商店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();
}
});
【问题讨论】:
-
我使用一系列动作而不是等待。
-
@JanakaStevens 你是什么意思?例子pleaseeeee!)
标签: javascript reactjs reactjs-flux flux