RxJava:void observable的zip操作符线程中断错误

时间:2016-05-11 16:04:18

标签: java android rx-java cloudinary reactivex

如果有两个Observable,zip运算符如何工作?对我来说,当一个人完成时,它会打断另一个人。我的情况不是void,它等待每个observable完成,然后返回结果。

代码是

   Observable<Void> deleteImageObservable = deleteImage(order.getPrescriptionUrl())
            .subscribeOn(Schedulers.io());

    // deltes order image

    // Deletes order without image
    Observable<Void> deleteOrderObservable = Observable.create(subscriber -> {

        App.getFirebase().child(Constants.Path.ORDERS).child(order.getOrderPath()).removeValue((firebaseError, firebase) -> {
            if (firebaseError != null) {
                // on order delete failed
                Timber.e(firebaseError.toException(), "Order delete failed on id ", order.getOrderId());
                subscriber.onError(firebaseError.toException());
            } else {
                Timber.i("Order deleted, key: %s", order.getOrderPath());
                subscriber.onCompleted();
            }

        });

    });

    return Observable.zip(
            deleteImageObservable,
            deleteOrderObservable, (aVoid, aVoid2) -> {
                return aVoid;
            }
    );

我使用cloudinary uploader()。destroy()来删除图像,如果成功则返回Void,否则异常/错误。

它立即执行firebase查询,并在成功时中断图像删除可观察。

这是正确的行为吗?或者我的代码中有错误?

1 个答案:

答案 0 :(得分:1)

如果其中一个输入序列比其他输入序列短,则

Zip急切完成。您可以改为merge来源。