【发布时间】:2016-08-10 22:11:07
【问题描述】:
我是 Bacon.js 和 FRP 概念的新手。我正在努力实现非常基本的功能。我在一些本地存储中有一组保存的值:
['A', 'B', 'C']
我有一个从存储中读取这些值的异步函数(返回 Promise)。
我有'add' 事件将新项目添加到数组和'remove' 事件以从数组中删除项目。每次数组更新都应该将更新后的数组写入本地存储。
我最终得到了这个解决方案,但它没有按预期工作:
const items = Bacon
.fromPromise(storage.get('items'))
.mapError(() => [])
.merge(Bacon.fromEvent(events, 'add').map(l => [l]))
.merge(Bacon.fromEvent(events, 'remove').map(l => [l]))
.skipDuplicates()
.filter(l => l)
.toProperty();
items.onValue((items) => {
// everytime rewrites storage with new array (but without old values)
console.log(items);
storage.put('items', items);
});
return items;
所以一开始的行为是:
- 我们从存储中读取数据(没关系):
['A', 'B', 'C'] - 但是当
'add'事件被Ditem 触发时,它不会添加到现有的数组中,item 会替换以前的数组值:['D']
我怎样才能用培根做到这一点?我在考虑 update 方法,但不幸的是它的初始值不应该是流或其他异步操作。
【问题讨论】:
标签: javascript functional-programming rxjs frp bacon.js