1

zip 运算符在两个 Observable 的情况下如何工作?对我来说,当一个完成时它会打断另一个。除了 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。

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

4

1 回答 1

1

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

于 2016-05-11T16:30:20.737 回答