最近使おうと思っているので備忘録。
bacon.js is 何?
JSでFRPをするためのライブラリ。
メソッド紹介
個人的にはpropertyはあまり使わないだろうと思っています。
asEventStream
stream = $(element).asEventStream(event)
elementのDOMに対して、eventのイベントのstreamを作る。
そのDOMに対してeventが起きると、streamに要素としてeventが流れる。
普通の世界からstreamの世界への入り口。
map
stream2 = stream.map(function(elem){/* logic */})
streamに流れてきた要素をlogicで変換して、返り値をstream2に流す。
scan
stream2 = stream.scan(firstVal, function(result, elem){/* logic */})
streamに流れてきた要素elemを、過去の結果resultと共にlogicで処理し、resultをstream2に流す。
resultの初期値はfirstValで与えられる。
reduceに近いが末端処理ではない。
filter
stream2 = stream.filter(function(elem){/* logic */})
streamに流れてきた要素のうち、logicでtrueを返すもののみをstream2に流す。
merge
mergedStream = stream.merge(stream2)
streamとstream2を結合したmergedStreamを作る。
2つのストリームの要素をまとめて流す。
onValue
stream.onValue(function(elem){/* logic */})
streamに要素(elm)が流れてくるたびに関数を実行する。
streamの世界から普通の世界に返ってくる末端処理。(forEachみたいな。)
flatMap
newStream = stream.flatMap(function(elem){/* logic(return stream2) */})
streamから流れてきたelemを、stream2を返すようなlogicに入れる。 stream2から要素が流れてきたら、それをnewStreamに流す。
(非同期処理系に用いるのが一般的かな)
flatMapLatest
newStream = stream.flatMapLatest(function(elem){/* logic(return stream2) */})
flatMapと違い、stream2から流れてきた最新の要素のみをnewStreamに流す。
(非同期処理系で処理に時間がかかる場合に、順序を保証するために使うのかな。)
conbine
newStream = stream.conbine(stream2, function(elem, elem2){/* logic */})
streamから流れてきた要素elemと、stream2から流れてきた要素elem2をlogicで処理した結果をnewStreamに流す。
どちらかのstreamから要素が流れてきたタイミングで実行される。要素が流れてこなかった方のsteamの要素は直前の要素を用いる。
後で調べる
awaiting
1 2 3 |
|
要素が流れてくるまでの間の処理をするのかな
fromPromise
promiseが解決したタイミングで要素が流れるstreamかな?
fromCallback
callbackが実行されたタイミングで要素が流れるstreamかな?
once
throttle
sample
propertyの値が一定時間変わらなかったら要素が流れる?