我有一個(費時)計算,類似的東西:如何跳過可觀測量的項目,而組合使用RxJS與流逝的定時器處理
async calculation(input: MyInputType): Promise<MyOutputType> {
// fetch some infos from an HTTP endpoint
// calculate result by combining received infos with input
return result; // Promise which resolves after all calculation is complete
}
計算所用的輸入經由來自另一個部件一個可觀察的(BehaviorSubject
),它發出的物品有時比他們可以處理的速度快。因此,輸出依賴於http端點的可觀察信息和獲取的信息,這些信息也可能隨時發生變化。
重要:只有的最後計算結果是我的應用程序相關,必須在任何時間的變量可用。
我的目標是使用RxJS和其反應性運營商設置一個可觀察到的鏈具有以下行爲:從所述源BehaviorSubject
- 物品發射而計算當前正在處理應該被忽略(backpressuring防止DoS)但是...
- 當前計算完成或發生超時時,如果有新的計算項目,則必須直接爲最近的輸入項目啓動新的計算。
- 如果在至少5分鐘內沒有開始計算,則必須再次使用最近的輸入項目開始新的計算。 (這對更新即將到來的http信息很重要)
有沒有人有任何想法如何解決這個問題?
(我使用的是RxJS 5,TypeScript,Node.js,但也歡迎其他語言的反應式解決方案。)
我認爲這個問題相當接近你想要達到的目標。 https://stackoverflow.com/q/46785128/482868 –
如果計算時間超過5分鐘,會發生什麼情況?是否還有新的計算開始,如果有的話,舊計算會發生什麼? – concat
好問題,但是由於我在第二個項目符號中提到的超時,所以不應該發生這種情況。這個超時(計算本身)當然少於5分鐘。因此在這種情況下可以放棄結果。 – Niehno