【问题标题】:RxJava: zip operator thread interrupt error for void observableRxJava:void observable 的 zip 运算符线程中断错误
【发布时间】:2016-09-07 03:58:54
【问题描述】:

如果有两个 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 查询并在成功时中断 image delete observable。

这是正确的行为吗?还是我的代码有错误?

【问题讨论】:

    标签: java android rx-java cloudinary reactivex


    【解决方案1】:

    如果输入序列之一比其他序列短,Zip 会急切地完成。您可以改为 merge 来源。

    【讨论】:

    • 感谢您的回答。这就是我要找的运营商。您对何时使用 zip 和何时不使用有什么建议吗?
    • zip 在您有要逐行组合的数据时很有用,但不能作为延续的手段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    • 2021-05-11
    相关资源
    最近更新 更多