listenzz / RxCommand

A UI-related rxjava component for android mvvm architecture
MIT License
128 stars 14 forks source link

Command的内部类中return的Observer如果onNext(null),不会触发结果回调 #5

Open LittleMango opened 6 years ago

LittleMango commented 6 years ago

如果RxCommand是这样创建的:

        RxCommand<Object> cmd = RxCommand.create(new Function<Object, Observable<Object>>() {
            @Override
            public Observable<Object> apply(Object o) throws Exception {
                return Observable.create(new ObservableOnSubscribe<Object>() {
                    @Override
                    public void subscribe(ObservableEmitter<Object> e) throws Exception {
                        e.onNext(null);    //这里参数为null
                        e.onComplete();
                    }
                });
            }
        });

        cmd.switchToLatest().subscribe(new Consumer<Object>() { 
            //如果cmd的副作用调用onNext(null),则这个订阅者不会收到信号
            //如果cmd的副作用调用onNext(""),这个订阅者才会收到信号
            @Override
            public void accept(Object o) throws Exception {
                Log.i(TAG, "accept :" + o); //这行不会输出
            }
        });
       cmd.execute(null);

我观察到以下现象:

1.RxCommand的对象可以通过execute(null)传入null参数,可以执行命令 2.在ReactiveObjc、ReactiveCocoa中调用sendNext:nil,传入nil的话是可以发送信号的

所以我有个疑问,RxCommand的副作用中调用onNext(null)为什么不发送信号,博主当初是怎么考虑的?

listenzz commented 6 years ago

RxJava2 是不允许 e.onNext(null) 的,这是和 RxJava1 不同的地方,你应该可以在 cmd.errors 中观察到这个错误。

LittleMango commented 6 years ago

好的,确实是这样的。