如果有两个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查询,并在成功时中断图像删除可观察。
这是正确的行为吗?或者我的代码中有错误?
答案 0 :(得分:1)
Zip急切完成。您可以改为merge
来源。