我使用bacon.js,並有一些情況下信號是從兩個來源發出:是否有可能以某種方式節制「重複」培根動作?
sourceA :: EventStream a
sourceB :: EventStream Bool
當sourceA
被觸發,它應該觸發運行repeatedly
到永久,當信號從發射除了一些行動sourceB
。所以語法它可能是這樣的:
aAction = sourceA
. repeatedly (200, [1,2,3])
. until (sourceB)
所以我基本上要求一個模takeWhile
或takeUntil
組合程序,但無法找到在源代碼或文檔這樣的功能。有什麼想法嗎?
這將會是更好的,如果有一個通用的組合子
throttleWhen :: Bool -> EventStream a
或
throttleWhen' :: EventStream Bool -> EventStream a
終止某些條件的任何臘肉事件流,我怎麼會去實現這樣的事情?
注意,下面這個方案:
faAction = sourceA . repeatedly (200, [1,2,3])
aAction = faAction . takeUntil (sourceB)
節流導出流aAction
,而不是原來的。
我想我有培根的實現的概念時隔knowlege這裏。 Bacon.repeatedly(200,[1..3])是一種懶惰地產生無限價值流的行爲嗎?那麼在你的例子中,一旦行爲'takeUntil(...)'不再請求值,'Bacon.repeatedly'不會再生成更多值? – chibro2
你是對的。 Bacon中的所有生成器函數確實是懶惰的,以及所有流數據源都應該是這樣,以便流用戶不必關心資源管理。培根負責根據需求自動分配資源。 – raimohanska