如果出现意外错误,我可以重用 Mono 吗

问题描述 投票:0回答:1

我有以下代码

    Mono<FileInfo> fileInfoMono = getFileInfo(fileName, filelocation);

    return fileInfoMono.map(info -> fileReader.read(info)
        .doOnNext(this::log)
        .flatMap(info -> processFile(info))
        .onErrorResume(throwable -> handleAndReturnEmpty(throwable, fileInfoMono));
  }
private Mono<FileInfo> handleAndReturnEmpty(Throwable cause, Mono<FileInfo> fileInfoMono {
    return fileInfoMono.doOnNext(info -> logError(cause.getMessage())
        .flatMap(errorService::handleUnexpectedError)
        .flatMap(info -> Mono.empty());
  }

这段代码的思路是获取一个文件信息,然后做一些文件处理。如果发生任何意外异常,我需要处理它(例如移动到

error
文件夹)。为此,我需要获取当前文件位置(这是
FileInfo
的目的)。

有什么方法可以重用同一个 Mono 吗?因为目前它不起作用,也没有给我任何消息

java spring spring-webflux project-reactor
1个回答
0
投票

我发现的最好方法是使用

flatMap
将进一步的逻辑移动到一个单独的方法。

在这种情况下,

fileInfo
将作为方法参数中的普通对象使用。或者只是在
flatMap
语句中进行反应式执行,那是完全一样的

getFileInfo(fileName, filelocation).flatMap(fileInfo -> fileReader.read(fileInfo)
        .doOnNext(this::log)
        .flatMap(info -> processFile(info))
        .onErrorResume(throwable -> handleAndReturnEmpty(throwable, fileInfo));
© www.soinside.com 2019 - 2024. All rights reserved.