【问题标题】:Ambiguous Behaviour of RxJava flatMap OperatorRxJava flatMap 运算符的歧义行为
【发布时间】:2020-05-15 04:15:14
【问题描述】:
public class MainActivity1 extends AppCompatActivity {
    private String LOG_TAG = "MY_LOG";
    private CompositeDisposable compositeDisposable = new CompositeDisposable();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        compositeDisposable.add(getObservable().subscribeWith(getObserver()));
    }

    private Observable<Integer> getObservable(){
        return Observable.just(1,2,3).flatMap(lValue -> Observable.just(lValue,lValue,lValue));
    }

    private DisposableObserver<Integer> getObserver(){
        return new DisposableObserver<Integer>() {
            @Override
            public void onNext(@NonNull Integer s) {
                Log.d(LOG_TAG,"onNext : " + s);
            }

            @Override
            public void onError(@NonNull Throwable e) {
                Log.d(LOG_TAG,"onError");
            }

            @Override
            public void onComplete() {
                Log.d(LOG_TAG,"onComplete");
            }
        };
    }
}

以上代码的输出是:

D/MY_LOG: onNext : 1
D/MY_LOG: onNext : 1
D/MY_LOG: onNext : 2
D/MY_LOG: onNext : 2
D/MY_LOG: onNext : 3
D/MY_LOG: onNext : 3
D/MY_LOG: onComplete

这里 1、2 和 3 每次打印两次。预期的行为应该是 1、2 和 3 每次打印三次,因为三个值已在 just 运算符内传递到 flatMap 运算符内。有谁知道为什么会观察到这种奇怪的行为?

【问题讨论】:

  • (Kotlin) 这按预期工作:Observable.just(1, 2, 3).flatMap { Observable.just(it, it, it) }.subscribe { println(it) }

标签: rx-java reactive-programming rx-java2


【解决方案1】:

代码似乎没问题。有时也可能是日志的问题,如果您经常打印,日志可能不会打印所有值。 尝试添加doOnNext 并查看just 是否发出所有值

 Observable.just(lValue,lValue,lValue).doOnNext(new Consumer<Integer>() {
        @Override
        public void accept(Integer integer) throws Throwable {
            Log.d(TAG, "accept: "+ integer);
            // or use debugger to check the value
        }
    })

【讨论】:

    猜你喜欢
    • 2021-09-09
    • 2010-09-27
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 2021-05-02
    • 1970-01-01
    相关资源
    最近更新 更多