anchor.diff:  [source,java]
   ----
   Flux.just("key1", "key2")
  -    .flatMap(k -> callExternalService(k)) // <1>
  -    .onErrorResume(e -> getFromCache(k)); // <2>
  +    .flatMap(k -> callExternalService(k) // <1>
  +        .onErrorResume(e -> getFromCache(k)) // <2>
  +    );
   ----
   <1> For each key, we asynchronously call the external service.
   <2> If the external service call fails, we fallback to the cache for that key. Note that
  
positive.code: LongAdder failureStat = new LongAdder();
  Flux<String> flux =
  Flux.just("unknown")
      .flatMap(k -> callExternalService(k)) // <1>
      .doOnError(e -> {
          failureStat.increment();
          log("uh oh, falling back, service failed for key " + k); // <2>
      })
      .onErrorResume(e -> getFromCache(k)); // <3>
  ----
  <1> The external service call that can fail...
  <2> ...is decorated with a logging side-effect...
  
negative.code: Flux.just("timeout1")
      .flatMap(k -> callExternalService(k))
      .onErrorResume(original -> Flux.error(
              new BusinessException("oops, SLA exceeded", original));
  ----
  
  However, there is a more straightforward way of achieving the same with `onErrorMap`:
  