1

我想在使用 VAVR(以前称为 javaslang)时记录异常。下面是示例代码片段。

    //will get 500 as response from this url
    String sampleurl    =   "http://someurl.com";
    List<String>    myList  =   List.of(sampleurl);
    LOGGER.info("In {} with urls {}",getClass(),myList);        

    return Observable.from(myList).flatMap(url ->

            Observable.create(subscriber -> {

                Try<String> httpEntity  = HttpUtil.retrieveData(url).flatMap(httpResponse -> Try.of( () -> EntityUtils.toString(httpResponse.getEntity())));
                httpEntity
                        .andThen(subscriber::onNext)
                        .andThen(subscriber::onCompleted)
                        .onFailure(subscriber::onError);

            }));

我试图在 onFailure() 块中记录异常,但没有记录任何内容。请就此给我建议。

问候,杰

4

1 回答 1

2

在这两种情况下,成功和失败,Vavr 都按预期工作。以下是简单的测试:

// prints nothing
Try.success("ok")
        .andThen(() -> {})
        .andThen(() -> {})
        .onFailure(System.out::println);

// prints "java.lang.Error: ok"
Try.failure(new Error("ok"))
        .andThen(() -> {})
        .andThen(() -> {})
        .onFailure(System.out::println);

我看到两个可能的答案,为什么您的示例中没有记录失败:

  1. 记录器配置不符合您的需求
  2. observables 没有被处理,Try也不会被调用

免责声明:我是 Vavr 的创造者

于 2018-03-31T07:51:57.523 回答