我有以下代码
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 吗?因为目前它不起作用,也没有给我任何消息
我发现的最好方法是使用
flatMap
将进一步的逻辑移动到一个单独的方法。
在这种情况下,
fileInfo
将作为方法参数中的普通对象使用。或者只是在 flatMap
语句中进行反应式执行,那是完全一样的
getFileInfo(fileName, filelocation).flatMap(fileInfo -> fileReader.read(fileInfo)
.doOnNext(this::log)
.flatMap(info -> processFile(info))
.onErrorResume(throwable -> handleAndReturnEmpty(throwable, fileInfo));