bacon.js 入門

| Comments

最近使おうと思っているので備忘録。

参照1

参照2

参照3

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
text.awaiting(suggestions).onValue(function(x) {
  if (x) $('#results').html('Searching...');
});

要素が流れてくるまでの間の処理をするのかな

fromPromise

promiseが解決したタイミングで要素が流れるstreamかな?

fromCallback

callbackが実行されたタイミングで要素が流れるstreamかな?

once

throttle

sample

propertyの値が一定時間変わらなかったら要素が流れる?

Comments