2015-05-31 60 views
3

假設我有一個文件流filesStream和一個函數uploadFile,它返回一個值(Rx.Observable.fromPromise(...))的流。在流文件可以通過簡單的flatMap上傳:用相應的flatMap結果壓縮值

filesStream.flatMap(uploadFile) 

我需要的是從filesStream與相應的響應從uploadFile zip文件:

zippedStream.subscribe(
    (file, response) => console.log("File " + file.name + " uploaded: " + response.message) 
) 

,我想出了一個相當混亂的方法這不工作

var zipppedStream = filesStream.flatMap(
    (file) => uploadFile(file).zip(Rx.Observable.just(file), (r, f) => [r, f]) 
) 

但我真的不喜歡它,因爲我需要解壓在二值陣列,它通常看起來很重。 這是你如何做,或者我失去了一些東西?

+0

'zippedStream.subscribe( (文件,響應)'<---你不能有,因爲'onNext'處理函數的簽名意味着只有一個參數傳遞,你可以解構它:'zippedStream.subscribe( ([file,response])' – zerkms

回答

3

您可以繞過使用zip和使用flatMap過載,而不是來完成你想要的東西在這裏

let zippedStream = fileStream.flatMap(
(file) => uploadFile(file), 
(file, uploaded) => [file, uploaded]); 

zippedStream.subscribe(
([file, response]) => console.log("File " + file.name + " uploaded: " + response.message)); 
+0

這就是我所需要的,謝謝!徹底。 –