具有改进和rxJava的请求的特殊异步

时间:2015-05-22 14:18:20

标签: java reactive-programming rx-java

我正在尝试使用这样的改造来上传图像:

rx.Observable.from(image.getChunks())
  .flatMap(chunk -> return api.upload(chunk))
  .subscribe(resp -> {}, err -> {} );

此处image.getChunks()返回List<Chunk>,而api是一项返回rx.Observable的改装服务

看起来不错,但我们的后端有一个特定的第一个和最后一个块应该是第一个和最后一个相应的。在我编写的代码的情况下,它同时发送请求,因此有时会以错误的顺序处理块。

我想用纯粹的rx做这件事,但是我不能把我的思想包裹在rx周围以达到预期的效果。有人可以帮我按正确的顺序安排firstlastskipskipLast方法吗?

感谢。

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:

我周末意识到我写的代码示例不会按预期工作。

0 个答案:

没有答案