微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Flowable 使用 RxJava ReactiveX 执行任务和返回值

如何解决Flowable 使用 RxJava ReactiveX 执行任务和返回值

我有下面的方法检查文件格式是否正确,如果它们正确,它会添加requestBody,否则,它应该向客户端抛出一个错误消息,该文件格式是无效。

public Maybe<HttpResponse<?>> post(Publisher<CompletedFileUpload> images) {
        return Flowable.frompublisher(images)
                .collect(MultipartBody::builder,(requestBody,file) -> {
                    if (new FileExtension().fileExtensionValidation(file.getFilename())) {
                        requestBody
                                .addPart("images",file.getFilename(),MediaType.TEXT_PLAIN_TYPE,file.getBytes());
                    }
                })
                .flatMapMaybe(requestBody -> {
                    if (true)
                        return iImageUploadClient.post(requestBody.build());
                    else
                        return Maybe.just(HttpResponse.serverError("Image file extension invalid,should ne .png,.jpg,.jpeg,.gif"));
                });
    }

代码检查文件格式 if (new FileExtension().fileExtensionValidation(file.getFilename())) 失败时应返回消息 return Maybe.just(HttpResponse.serverError("Image file extension invalid,.gif"));

我写的 if (true) 总是正确的,但我需要在这里检查或如何从 .collect() 函数返回。我怎样才能用反应式 java 做到这一点

解决方法

您可以在收集和最后一个 flatMapMaybe 之间使用共享的 AtomicBoolean。此外,如果您想立即停止图像,请抛出异常并将其转换为中性多部分体,以便 flatMapMaybe 仍然运行。

public Maybe<HttpResponse<?>> post(Publisher<CompletedFileUpload> images) {
    return Maybe.<HttpResponse<?>>defer(() -> {
        AtomicBoolean formatError = new AtomicBoolean();
        return Flowable.fromPublisher(images)
                .collect(MultipartBody::builder,(requestBody,file) -> {
                    if (new FileExtension().fileExtensionValidation(file.getFilename())) {
                        requestBody
                                .addPart("images",file.getFilename(),MediaType.TEXT_PLAIN_TYPE,file.getBytes());
                    } else {
                        formatError.set(true);
                        throw new CancellationException();
                    }
                })
                .onErrorResumeNext(error -> {
                     if (error instanceof CancellationException) {
                         return Single.just(MultipartBody.builder());
                     }
                     return Single.error(error);
                })
                .flatMapMaybe(requestBody -> {
                    if (!formatError.get())
                        return iImageUploadClient.post(requestBody.build());
                    else
                        return Maybe.just(HttpResponse.serverError(
                            "Image file extension invalid,should ne .png,.jpg,.jpeg,.gif"));
                });
    });
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。