我正在尝试使用这样的改造来上传图像:
rx.Observable.from(image.getChunks())
.flatMap(chunk -> return api.upload(chunk))
.subscribe(resp -> {}, err -> {} );
此处image.getChunks()
返回List<Chunk>
,而api
是一项返回rx.Observable
的改装服务
看起来不错,但我们的后端有一个特定的第一个和最后一个块应该是第一个和最后一个相应的。在我编写的代码的情况下,它同时发送请求,因此有时会以错误的顺序处理块。
我想用纯粹的rx做这件事,但是我不能把我的思想包裹在rx周围以达到预期的效果。有人可以帮我按正确的顺序安排first,last,skip和skipLast方法吗?
感谢。
PS:或者使用上面列出的方法是错误的方法吗?
UPD:我想代码看起来像这样:
rx.Observable.from(image.getChunks())
.first()
.map(firstChunk -> return api.upload(firstChunk))
.subscribe(
resp -> {
rx.Observable.from(image.getChunks())
.skip(1)
.skipLast(1)
.flatMap(chunk -> return api.upload(chunk))
.subscribe(
resp -> {},
err -> {},
() -> {
rx.Observable.from(image.getChunks())
.last(1)
.map(lastChunk -> {
api.upload(lastChunk).subscribe(
resp -> {
//upload finished
},
err -> {}
)
}
);
},
err -> {}
);
我没有尝试运行此代码,所以我不确定它是否有效。但这里的问题是我做rx.Observable.from(image.getChunks())
三次。我想做一次而不是:
有可能吗?
UPD#2:
我周末意识到我写的代码示例不会按预期工作。 1}}将在消耗所有项目时触发最后一个请求,但在收到所有响应时不会触发。