使用相应的 flatMap 结果压缩值
Zipping value with corresponging flatMap result
假设我有一个文件流 filesStream
和一个函数 uploadFile
,其中 returns 一个值流 (Rx.Observable.fromPromise(...))。流上的文件可以通过简单的 flatMap
:
上传
filesStream.flatMap(uploadFile)
我需要的是压缩来自 filesStream
的文件以及来自 uploadFile
的相应响应:
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])
)
但我不太喜欢它,因为我需要解压 subscribe
中的二值数组,而且它通常看起来很重。
是你的做法还是我遗漏了什么?
您可以绕过 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));
假设我有一个文件流 filesStream
和一个函数 uploadFile
,其中 returns 一个值流 (Rx.Observable.fromPromise(...))。流上的文件可以通过简单的 flatMap
:
filesStream.flatMap(uploadFile)
我需要的是压缩来自 filesStream
的文件以及来自 uploadFile
的相应响应:
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])
)
但我不太喜欢它,因为我需要解压 subscribe
中的二值数组,而且它通常看起来很重。
是你的做法还是我遗漏了什么?
您可以绕过 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));