在回流js中,我们waitFor
以两种方式解决,一种用于顺序数据流,另一种用于并行数据流。我尝试以一种避免持有相同数据(即双重维护数据)的方式对数据存储进行建模。
基本上,数据存储是 CQRS 组件,我尽量避免让 2 个数据存储最终得到相同类型的数据。如果我需要以某种方式转换只有某些组件需要的数据,我会将其分解为“聚合”数据存储。天真的实现:
var carsStore = Reflux.createStore({
init: function() {
this.listenTo(Actions.updateCars, this.updateCallback);
},
updateCallback: function() {
$.ajax('/api/cars', {}).done(function(data) {
this.trigger(data.cars);
}.bind(this));
}
});
我们可以创建另一个数据存储,通过监听来聚合数据carsStore
:
var modelsStore = Reflux.createStore({
init: function() {
this.listenTo(carsStore, this.carsCallback);
},
carsCallback: function(cars) { // passed on from carsStore trigger
this.trigger(this.getModels(cars)); // pass on the models
}
getModels: function(cars) {
return _.unique(_.map(cars, function(car) { return car.model; }));
}
});
这样你的 React 视图组件可以使用一个来获取汽车,另一个来获取模型,模型是从carStore
.
如果存储需要等待两个并行数据流完成,我们提供Reflux.all
加入操作和存储。这很有用,例如,如果您正在等待从不同的 REST 资源加载数据。
var carsAndPartsAreLoaded = Reflux.all(carStore, partsStore);
// you may now listen to carsAndPartsAreLoaded
// from your data stores and components
希望这对你有意义。