1
我想用bacon.js製作一個簡單的網頁。它應該有一個按鈕,通過鼠標點擊來切換布爾狀態。 設置流之後,應該通過將對象發送到init流來初始化應用程序。在這裏,我只是發送切換所需的初始布爾狀態(false
)。 的代碼看起來像這樣(我僞造了點擊按鈕和初始化):如何使用scan()更清晰
// Helper function
var neg = function (a) { return !a; };
// Fake of initialization stream. End after one element
var init = Bacon.sequentially(500, [false]);
// Fake of button click event stream.
var click = Bacon.repeatedly(1000, [{}]);
var toggle = init.concat(click).scan(null,
function(a, b) { return a === null ? b : neg(a); }).skip(1).toEventStream();
toggle.log();
// Output: false, true, false, true, ....
上面的代碼(jsFiddle)按預期工作,但我不喜歡的是,toggle
流創建線是如此複雜。
如果有可能省略種子值(把它從流),如果scan
返回EventStream
而不是Property
的,我可以這樣寫:
var toggle = init.concat(click).scan(neg);
這可以讀更好。或者,如果有可能給種子如流,我可以這樣寫:
var toggle = click.scan(init, neg);
你有什麼建議,使代碼更清楚了嗎? 有沒有其他解決方案使用scan
? 我應該讓我自己的scan
方法?
我想你想使用'flatMap' – Bergi 2014-12-08 01:18:25
你是對的Bergi。我意識到這一點,因爲我昨晚躺在牀上。 :) – chreekat 2014-12-08 06:34:03