我正在學習使用神奇的Bacon.js函數庫進行函數式響應式編程。添加處理程序的屬性或流很簡單:如何取消訂閱Bacon.js中的處理程序?
handler = function(value){... do something ...}
property.onValue(handler)
某處說下了線我想退租,這樣的(僞):
property.unsubscribe(handler)
有沒有辦法一起做Bacon.js?
我正在學習使用神奇的Bacon.js函數庫進行函數式響應式編程。添加處理程序的屬性或流很簡單:如何取消訂閱Bacon.js中的處理程序?
handler = function(value){... do something ...}
property.onValue(handler)
某處說下了線我想退租,這樣的(僞):
property.unsubscribe(handler)
有沒有辦法一起做Bacon.js?
從文檔的"cleaning up"部分:
調用由訂閱()調用返回的Dispose()函數。
所以你要保存的onValue
返回:
var dispose = property.onValue(handler)
然後調用它刪除監聽器:
dispose();
stream.subscribe(f)將給定的處理函數訂閱到事件流。函數將接收事件對象(見下文)。 subscribe()調用返回一個您可以調用取消訂閱的取消訂閱功能。您也可以通過從處理函數返回Bacon.noMore作爲對事件的回覆來取消訂閱。
上述兩個答案都是正確的。就我個人而言,我從來沒有使用任何解決方案。實際上,它們主要用於內部目的以及編寫自定義組合器和集成。
因此,我推薦像take
,takeWhile
和takeUntil
這樣的組合器。在FRP應用程序中,觸發需求的信號通常可以建模爲EventStream。在這種情況下,你可以做
var data, stopper // EventStreams
data.takeUntil(stopper).onValue(..)
很高興看到這樣的例子。 「塞爾」只是一個你用於控制流程的「總線」嗎? – pdoherty926
呃,例如,如果您想對鼠標移動做出反應,並在按下某個鍵時停止該操作,您將執行'mouseMoves.takeUntil(keyPress).onValue(..)'。或者如果你只想做一次反應,你可以通過'clicks.take(1).onValue(..)'來實現。 – raimohanska
謝謝麥格老鷹!我知道它必須在某個地方,但是對我而言,我看不到它。 :) – jpadvo