Почему свойство Bacon не сохраняет последние значения - PullRequest
0 голосов
/ 17 июня 2020

Я ожидаю, что 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);

Теперь это работает. Но мне нужно удвоить количество потоков и строк кода, чтобы выполнить простую условную проверку свойств. Это безумие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...