Я новичок в концепциях Bacon.js и FRP. Я борюсь с реализацией очень простых функций. У меня есть массив сохраненных значений в некотором локальном хранилище: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'
событие увольняется сD
, элемент не добавляется к существующему массиву, элемент заменяет предыдущие значения массива:['D']
Как я могу это сделать с Бэконом? Я думал о методе update
, но, к сожалению, его первоначальное значение должно быть не потоком или каким-либо другим асинхронным действием.
спасибо! Я уже понял это и сделал точно так же, как в вашем примере :) – Kosmetika