0

doSomething在以下情况下,如果onFailure工作正常发生错误:

this.restClient.getSomething()
  .flatMap((something) -> {
    return this.restClient.doSomething();
  })
  .flatMap((res) -> {
    return Uni.createFrom().item(Response.ok().build());
  }).onFailure().transform((e) -> {
    LOG.error("Failed with", e);
    throw new InternalServerErrorException("Failed!");
  });

问题是,如果错误发生在getSomethingonFailure调用并且我收到:

未处理的异步异常,发回 500

我试过使用onFailure().callonFailure().retry()甚至onFailure在中间设置了 ,但似乎没有任何效果。

4

1 回答 1

2

如果我理解正确,getSomething,创建流。但是在创建时出现问题,例如永远不会创建流​​。

由于未创建流,因此不会发生 onAnything,因为流不存在。为了避免这种行为,我通常使用 voidItem 创建流,然后将其映射到正确的创建。因此,创建中的错误将从流中处理,而不是从创建代码中处理。

单的例子:

Uni.createFrom().voidItem()
   .map( voidItem -> functionForRealValue)
   .onFailure(handleFailure)

这样,您应该能够处理流中的所有错误。重要的是要了解,您需要创建流,否则您无法在其上运行 onFailure。

于 2021-12-01T07:10:30.300 回答