Документация верна.
Flux.just("key1", "key2")
.flatMap(k -> callExternalService(k))
.onErrorResume(e -> getFromCache(k)); //k not resolved here
k не разрешается, потому что k объявлено в flatMap как локальная переменная .Это не видно для onErrorResume ().Если вы объявите k над конвейером, то есть перед Flux.just, то это будет разрешено.
Во-вторых, на ваш другой вопрос
Flux.just("aeiou","aeio").map(x -> {
if(!x.endsWith("u")){throws Exception;}
return x;})
.onErrorReturn(x -> x + "u")
.map(x -> x+";")
.subscribe();
Вы должны обратиться к документации по API.onErrorReturn () может позволить вам вернуть запасное значение.Но это запасное значение является жестко заданным, то есть вы не получите значение x там.Вы можете просто жестко закодировать значение для вас, но это может не решить вашу цель.
Я предлагаю взглянуть на onErrorResume(Function<? super Throwable,? extends Publisher<? extends T>> fallback)
, поскольку это позволяет вам написать функцию, в которую вы можете поместить некоторую логику для дополнительной обработки.
Это позволяет вам вернуть издателя, чтобы вы могли сделать что-то вроде ниже.
.onErrorResume(e -> { //get the value of x
String x = <>;// you will have to write logic to get the value of x here, as it will not be available directly
return Flux.just(x+"u");
})