2016-05-11 6 views
0

Observableの2つのケースでzip演算子はどのように機能しますか?私にとっては、それが完了すると、他の人に割り込む。私はボイド以外の場合、観測可能なものがすべて完了するのを待ってから、結果を返します。RxJava: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アップローダーを使用しています。破壊()画像を削除するには、それ以外の例外/エラー成功の場合はvoidを返します。

これは直ちにfirebaseクエリを実行し、成功すると、イメージ削除observableを中断します。

これは正しい動作ですか?あるいは、私のコードにバグがありますか?

答えて

1

入力シーケンスの1つが残りの文字列より短い場合、Zipは熱心に完了します。代わりにmergeソースを使用できます。

+0

ありがとうございました。それは私が探している演算子です。あなたはいつジップを使うべきか、そうしないことをいつお勧めしますか? – Arka

+0

zipは、行ごとに結合するデータがあるのに、継続手段としては機能しない場合に便利です。 – akarnokd

関連する問題