Как не играет, значение нужно же вернуть. Вы скажите конкретно откуда вы хотите возвращать этот undefined?
Кроме того вы резервируете undefined для этой цели, а он вполне может использоваться как обычное значение в библиотеке использующей трансдьюсер.
Можно ли имея на руках одну сложную операцию сложить ее с другой сложной операцией?
Уже писал, но повторюсь, будет ли это работать с FRP и прочими асинхронными вещами? Для .NET вроде есть реализация Rx.
Вообще подход с тем что возвращается новая коллекция скорее похож на LazyJs, и если создать сложную операцию в LazyJs, её нельзя будет передать в FRP библиотеку. Поэтому и спрашиваю про FRP.
Да, похоже. А IEnumerable позволяет заранее создать сложную операцию (flatten+map+filter+take) и потом применить ее сначала к списку, потом её же к хеш-мепу, и её же передать в библиотеку генерирующую значения со временем (Rx и пр)?
Я не знаю точно что такое IEnumerable. Если правильно понимаю, это интерфейс который должны реализовывать коллекции. Если так, то эти вещи стоят рядом но никак друг друга не заменяют. Т.е. вы можете обрабатывать с помощью трансдьюсеров всё, что реализует IEnumerable, но это же не значит что трансдьюсеры == IEnumerable.
printer = config.flatMapLatest(function(config) {
// возвращаем поток. Т.е. как бы переключаемся с потока на поток в зависимости от config
return config ? mouseCoords : mouseTarget;
}).map(function (coordsOrTarget) {
// тут уже обрабатываем конкретные значения из mouseCoords или mouseTarget
return 'Hello ' + coordsOrTarget;
});
Kefir, кстати, по определению ленив и работает похоже на LazyJS. Так как он обрабатывает поток значений, а не массив значений, и не может создавать временные массивы с результатами при всём желании.
Даже не знаю. LoDash можно например активно использовать внутри кефировских .map, .filter и пр. Еще можно его использовать во внешнем коде который, что-то делает с потоками. А так чтобы LoDash прям как-то взаимодействовал с Kefir — ничего особо в голову и не приходит.
Вот если бы LoDash умел создавать трансдьюсеры, и Kefir поддерживал трансдьюсеры, тогда они могли бы прям клёво взаимодействовать. Если трансдьюсеры станут модными в JavaScript, тогда может это будет…
Вы что-то странное написали, оно не будет работать :)
В .scan первый аргумент — предыдущее значение, а второй новое значение из источника, и вы должны вернуть значение которое выйдет из printer и станет «предыдущим значением» на следующем шаге. А .merge просто берет два потока и все события из них отправляет в новый поток. Ну т.е. вы никак не получите config и coords как параметры в .scan.
Кроме того вы резервируете undefined для этой цели, а он вполне может использоваться как обычное значение в библиотеке использующей трансдьюсер.
Тогда остальная часть коллекции тоже будет обрабатываться, хоть и все элементы выбросит take. А коллекции могут быть и бесконечными.
Если серьезно, то есть еще вопросы.
Можно ли имея на руках одну сложную операцию сложить ее с другой сложной операцией?
Уже писал, но повторюсь, будет ли это работать с FRP и прочими асинхронными вещами? Для .NET вроде есть реализация Rx.
Вообще подход с тем что возвращается новая коллекция скорее похож на LazyJs, и если создать сложную операцию в LazyJs, её нельзя будет передать в FRP библиотеку. Поэтому и спрашиваю про FRP.
Или я неправильно понял?
Я еще не успел написать документацию для .flatMapLatest, можно почитать в доках бекона пока: github.com/baconjs/bacon.js#observable-flatmaplatest
Вот если бы LoDash умел создавать трансдьюсеры, и Kefir поддерживал трансдьюсеры, тогда они могли бы прям клёво взаимодействовать. Если трансдьюсеры станут модными в JavaScript, тогда может это будет…
В
.scan
первый аргумент — предыдущее значение, а второй новое значение из источника, и вы должны вернуть значение которое выйдет изprinter
и станет «предыдущим значением» на следующем шаге. А.merge
просто берет два потока и все события из них отправляет в новый поток. Ну т.е. вы никак не получите config и coords как параметры в.scan
.Реализация в лоб скорее будет такая:
Но как вы верно заметили будут ненужные вычисления. Чтобы их избежать можно использовать .filterBy:
.filterBy
он как.filter
, только вместо функции принимает проперти или поток.huzlers.com/teen-dies-instantly-neck-injury-ice-bucket-challenge-falls-head-watch-video/