Open LittleMango opened 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)为什么不发送信号,博主当初是怎么考虑的?
RxJava2 是不允许 e.onNext(null) 的,这是和 RxJava1 不同的地方,你应该可以在 cmd.errors 中观察到这个错误。
e.onNext(null)
cmd.errors
好的,确实是这样的。
如果RxCommand是这样创建的:
我观察到以下现象:
所以我有个疑问,RxCommand的副作用中调用onNext(null)为什么不发送信号,博主当初是怎么考虑的?