ボタンクリックイベントからストリームを作成しました。このボタンは、データベース上の作成アクションに対応します。明らかに、私はデータベースアクションを1回だけ起動させたい(少なくとも完了するまで)。 Api.create
が返されるまで、createButtonStream
のイベントを無視する方法はありますか?すなわち、最初のイベントは#Api.createを呼び出す必要があり、後続のイベントは#Api.createが復帰するまで無視されるべきです。条件が満たされるまでストリーム上のイベントを無視しますか?
createButtonStream
.flatMap(() => Api.create()) //Needs to fire once until doSomething() is called
.onValue(result => doSomething(result))
頭に浮かぶ唯一の方法は、グローバルな状態を使用することです...と私はむしろそれをしないと思います。
//i don't wanna do this
let condition = true
createButtonStream
.filter(() => condition)
.map(() => condition = false)
.flatMap(() => Api.create())
.onValue(result => {condition = true; doSomething(result)})
kefirでは、flatMapFirstを使ってみることができます – iofjuupasli
@iofjuupasli私が間違っていないと、flatMapFirstはまだApi.createを起動します...最初のものが終了するまで応答を無視します。つまり、それはまだデータベースへの呼び出しを行います...私が防止しようとしているものです。 –
'' '' var source = Kefir.sequentially(100、[1、2、3])ではないようです。 var result = source.flatMapFirst(x => { console.log(x); return Kefir.interval(40、x).take(4); }); result.log(); '' '。コンソールへのログ '1 3' – iofjuupasli