[英]Autosave with RX in C#
我想實現一個自動保存功能。 我有兩個 Observable:
IObservable<Unit> changes
:每次用戶編輯文本時發出一個項目IObservable<Unit> saves
:每次按下保存按鈕時發出保存事件現在我想將它們組合成第三個流writeBack 。 該流有一個訂閱者,它將當前文本寫入數據庫。
我如何創建 writeBack 流,以便它滿足以下屬性?
我想確保只寫回未保存的更改。 如果出現以下情況,我不想保存文本:
這應該這樣做。 首先,我們確定我們可能想要保存的時間:
var saveTriggers = changes.Throttle(TimeSpan.FromSeconds(3))
.Merge(saves);
接下來,我們將它們過濾掉以確保它們符合您的邏輯:每次保存之間至少進行一次編輯,並且保存不能先進行。 SkipWhile
只是為了確保忽略更改之前的保存。 Scan
計算每次保存之間的更改次數。 我們只關心該數字何時變為 0(表示觸發了保存)。 並且DistinctUntilChanged
過濾掉連續的保存。
var actualSaves = saveTriggers.Select(_ => EventType.SaveTrigger)
.Merge(changes.Select(_ => EventType.Edit))
.SkipWhile(et => et == EventType.SaveTrigger)
.Scan(0, (editCount, eventType) => eventType == EventType.SaveTrigger ? 0 : editCount + 1)
.DistinctUntilChanged()
.Where(count => count == 0)
.Select(_ => Unit.Default);
並使用枚舉類
enum EventType
{
SaveTrigger,
Edit
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.