Я ожидаю, что p сначала внесет в журнал "3", но не записывает его. Как мне получить свойство, которое сохраняет последнее значение, полученное с автобуса.
let b = new Bacon.Bus();
let p = b.toProperty();
b.push(3);
p.log();
b.push(10);
Я хочу проверить свойство, чтобы возвращать другой поток внутри flatMap:
let pOne = Bacon.constant(true);
let pTwo = Bacon.constant(false);
let esOne = Bacon.interval(1000, true);
esOne.flatMap(_ => {
let p = _ ? pOne:pTwo;
if (p is true) {
return Bacon.never();
} else {
return Bacon.once({});
}
});
То, что я пробовал (pXX - это свойство esXXX - это поток событий):
let esTDragStackDropStack = pDragDrop
.map(_ => _.base)
.map(_ => _.state())
.filter(_ => _.dropstack)
.map(_ => _.dropstack)
.filter(_ => _.drag.stack)
.flatMap(_ => {
let pDropStack = pStackNEarly(_.drop.stackN)
.map(_ => _.base);
let es = pDropStack
.zip(pDragCardsEarly, (stack, { dragcards }) => {
return stack.canAdd(dragcards);
})
.take(1)
.flatMap(canAdd => {
if (canAdd) {
return makeFxTween({ stackN: _.drop.stackN }, 100,
{ drop: true})
.concat(
Bacon.once({
action: withI(_,
_ => _.drop.stackN) }));
} else {
return makeFxTween({
stackN: _.drag.stack.stackN
}, 100, { cancel: true })
.concat(
Bacon.once({
cancel: withI(_,
_ => _.drag.stack.stackN)
}));
}
});
return Bacon.once({ droprefresh:
withI({}, __ => _.drop.stackN) })
.concat(es);
}).toEventStream();
let esDragStackDropRefresh = esTDragStackDropStack
.filter(_ => _.droprefresh)
.map(_ => _.droprefresh);
let esDragStackDropStackCancel = esTDragStackDropStack
.filter(_ => _.cancel)
.map(_ => _.cancel);
let esDragStackDropStackSettleTween = esTDragStackDropStack
.filter(_ => _.tween && _.drop)
.map(_ => _.tween);
let esDragStackDropStackCancelSettleTween = esTDragStackDropStack
.filter(_ => _.tween && _.cancel)
.map(_ => _.tween);
let esDragStackDropStack = esTDragStackDropStack
.filter(_ => _.action)
.map(_ => _.action);
Теперь это работает. Но мне нужно удвоить количество потоков и строк кода, чтобы выполнить простую условную проверку свойств. Это безумие.