javascript - 培根更新属性相互依赖循环引入总线
问题描述
我有两个可能相互依赖的属性,所以我介绍了一个总线:
let esDealOne1 = Bacon.later(0, true);
let esDealOne2 = Bacon.later(1000, true);
let bHanging = new Bacon.Bus();
let esSetCards = bHanging.filter(_ => _.cards);
let pHanging = HangingStateProperty(esSetCards);
let pDrawer = DrawerProperty(bHanging, esDealOne1);
let pStacks = [
StackProperty(0, esDealOne2, pHanging),
];
function HangingStateProperty(esSetCards) {
let setCards = (_, cards) => {
return { ..._, ...cards };
};
return Bacon.update({},
[esSetCards, setCards]);
}
function DrawerProperty(bHanging, esDealOne1) {
let dealOne1 = (_) => {
let card = _.usefulProperty;
bHanging.push({ cards: [card] });
return _; };
return Bacon.update({},
[esDealOne1, dealOne1]);
}
function StackProperty(n, esAllDealOne2, pHanging) {
let esDealOne2 = esAllDealOne2.filter(_ => _.i === n);
let dealOne2 = (_, {i}, hangingState) => {
let cards = hangingState.cards;
_.property = cards;
return _;
};
return Bacon.update({},
[esDealOne2, pHanging, dealOne2]);
}
我怎样才能摆脱这辆公共汽车?
解决方案
很难移除总线,相反这会简化总线的使用:
export function SyncBus() {
let bus = this.bus = new Bacon.Bus();
this.assign = pBase => {
pBase.onValue(_ => bus.push(_));
};
}
用法:
let bDrawer = new SyncBus();
// don't forget `toProperty` otherwise gets old values
let pDragCardsDrawEarly = bDrawer
.bus
.map(_ => _.extra)
.filter(_ => _.dragcards)
.map(_ => ({ dragcards: _.dragcards }))
.toProperty();
let pDrawer = OwnerProperty({});
bDrawer.assign(pDrawer);
推荐阅读
- php - 一台计算机上的多个会话相互覆盖
- reactjs - FlatList 显示 10 个项目,直到调用 render()
- wordpress - 在 WooCommerce 中删除特定条件下的运费
- r - 使用 ggplot2 在 R 中的图例
- oracle - Oracle 视图:如何获取列定义
- casperjs - casperjs 无法从 APEX 应用程序下载 CSV
- javascript - 如何从javascript中的json对象获取所有父节点和子节点
- javascript - Angular 5 - 将模块导入动态模块
- javascript - 函数内部无法访问全局范围?
- java - 条码扫描仪逐个字符