【问题标题】:How to terminate the source observable from Observer's onNext method如何从 Observer 的 onNext 方法中终止源 observable
【发布时间】:2016-06-29 19:05:21
【问题描述】:

我想知道从 Observer 的 onNext 方法终止源 observable 的最佳方法是什么。

例如,我希望按钮事件仅在验证正常时发出一次。但是,当验证失败时,可以再次发出按钮事件。

我能想到的如下。

Observable....
    .subscribe(new Subscriber(){
        public void onNext(T t){
            // do something and terminate the Observable
            // only when the validate method return true
            if (validate(t)){
                 doSomething(t);
                 unsubscribe();
            }
         }
         ...
     });

但是,如果我需要一个 onCompleted 事件,它就不起作用。 此外,我不确定从观察者的onNext() 中调用onCompleted()

另外,我认为将验证带入 Observable 并不是一个好主意,因为 Observer 必须负责验证。 此外,在“Hot” Observable 的情况下,如果 observable 有一些观察者,则验证可能与每个 Observer 不同。

【问题讨论】:

    标签: rx-java


    【解决方案1】:

    对于这些情况,您可以使用takeUntiltakeWhile 之类的运算符:

    Observable....
        .takeUntil(t -> validate(t))
        .subscribe(t -> doSomething(t));
    

    一般提示:阅读API documentation。大多数答案已经在那里可用。在某些情况下,当您自己绘制大理石图并将​​其与参考页面上的图纸进行比较时,它也会有所帮助。最后,您可以将a more interactive experience 用于某些运算符。

    【讨论】:

    • 感谢您的回答!我认识接线员,但我无法理解。由于 observable 的源是一个对象,我强迫自己使用一个 observable 来处理每个观察者的不同验证。但是,在这种情况下,我可以创建一些 observables。我认为,使用 Rx 最困难的部分可能是灵活思考。再次,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    相关资源
    最近更新 更多