6

爲什麼flatMap導致下游減少觸發?RxJS減少不會繼續

我有這樣的代碼:

handleFiles.flatMap(files => 
    Rx.Observable.from(files). 
    flatMap((file, i) => fileReader(file, i)). 
    reduce((form, file, i) => { 
    form.append('file[' + i + ']', result); 
    console.log('reduce step', file); 
    return form; 
    }, new FormData()). 
    tap(console.log.bind(console, 'after reduce')) 
). 
subscribe(console.log.bind(console, 'response')); 

而問題是,「減少後」水龍頭從來沒有擊中。爲什麼?

日誌是這樣的:

​​

截圖:

Error screenshot

回答

2

如果文件是一個數組,那麼如果從fileReader返回的可觀察元素有效,則reduce應該終止。所以對於這段代碼,問題在於fileReader返回了一個沒有完成的observable。

10

的問題是不是在flatMap;它的方式reduce的作品。

reduce在整個流中讀入並將其減少爲單個值,僅當源流關閉時才發出。如果您的from(files)流沒有結束,那麼reduce將永遠不會輸出它的值。

嘗試使用scan代替;它發出每一箇中間步驟,似乎是你在找什麼。

+0

文件是一個JS數組,簡單明瞭。我添加了一個截圖。我之前已經掃描過,但確實工作...但是因爲它是一個JS數組聚合應該做onComplete,對吧? – Henrik

+0

然而,這是一個很好的結果。我發現我的錯誤;沒有完成fileReader中的主題。咄! – Henrik