2015-05-31 87 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

这就是我所需要的,谢谢!彻底。 –