【问题标题】:Observable validate each itemObservable 验证每个项目
【发布时间】:2017-12-12 06:09:59
【问题描述】:

如何验证Observable 中的每一项并在条件失败时返回错误?
现在我使用switchMapif 内部,但这个解决方案看起来不是很好:

Observable.just(1, 2, 3, -1, 4)
    .switchMap(x -> {
        if (x >= 0) {
            return Observable.just(x);
        } else {
            return Observable.error(new Exception("Input value should be positive"));
        }
    })
    .subscribe(
        x -> System.out.printf("value=%d\n", x),
        err -> System.out.printf("error: %s\n", err.getMessage())
    );

我可以使用任何内置方法来代替这个吗?

【问题讨论】:

  • 不是过滤器吗?
  • @PhoenixWang filter 只是删除“坏”值,而我需要一个例外
  • 1.您可以在过滤器中抛出异常,操作员将传递错误。 2. 我认为这对于反应式流来说不是很好的实现。例外意味着您不能再收听/订阅流。您最好使用 ErrorState 而不是 Exception。例如,包含您的值或异常以指示验证结果的 Result。 @g4s8

标签: exception rx-java rx-java2


【解决方案1】:

您可以使用doOnNext() 来抛出您的异常。

Observable.just(1, 2, 3, -1, 4)
        .doOnNext(x -> {
            if (x < 0) throw Exception("Input value should be positive");
        })
        .subscribe(
            x -> System.out.printf("value=%d\n", x),
            err -> System.out.printf("error: %s\n", err.message)
        );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 2018-06-12
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多