2016-08-02 75 views
0
---abcde-----f-------gh-----i----> //Events 

我有一個「工作隊列」,我想觀察/訂閱。這是一個要處理的命令對象的數組。新的作品通常以連發形式出現,並且需要連續處理(按收到的順序逐個處理,直至完全處理)。將RxJS v4代碼轉換爲v5,使用「拉」處理隊列

我正在使用RxJS 5.0.0-beta.6。 (由其他庫強加的版本)

下面是一個工作示例,說明我想要的行爲,但使用RxJS v4。

問題的主要代碼是這樣的......

var events$ = Rx.Observable.fromEvent(produceEvent, 'click') 
    .timestamp() 
    .tap(({timestamp}) => updatePanelAppend(pending, timestamp)); 

var inProgress$ = events$; 

var done$ = inProgress$ 
    .flatMapWithMaxConcurrent(1, ({timestamp}) => 
          Rx.Observable.fromPromise(() => { 
           updatePanelAppend(inProgress, timestamp); 
           removeFromPanel(pending, timestamp); 
           return expensiveComputation(getRandomInt(1, 5) * 1000, timestamp) 
          })); 

done$.subscribeOnNext((timestamp) => { 
    updatePanelAppend(done, timestamp); 
    removeFromPanel(inProgress, timestamp); 
}); 

http://jsbin.com/meyife/edit?js,output

鑑於API和不完全/改變文檔的當前beta測試階段,我無法弄清楚如何做到這一點在RxJS 5.

更新:這migration guide從v4移動到v5顯示許多功能被刪除,但沒有指示如何做事情的新方式。已刪除操作的示例:.tap,.controlled,.flatMapWithMaxConcurrent(已重命名)。

+0

發問,V4的解決方案來自何處:http://stackoverflow.com/questions/38601451/how-to-process-rxjs-stream-n-items-at-一次性完成項目完成自動填充 –

回答

1
  • flatMap/mergeMap - 現在需要一個併發參數

  • tap - >do

  • subscribeOnNext不再存在,所以只需使用subscribe有一個參數。

  • fromPromise RxJS 5上不存在過載,所以請使用defer代替。

查看更新jsbin here

+0

非常棒!很有幫助!注意:將RxJS版本更改爲5.0.0-beta.6後,需要進行一些更改。像.timestamp()運算符在該版本中不存在一樣。所以我只是從鼠標點擊事件中拉出timeStamp,因爲這不是代碼的核心。 –