2016-04-03 1 views
1

は、約束のアイデアを介して行われます:RxJava:観察可能なA、B、Cが完了するまで待ってから続けるような鎖がありますか? jQueryので

var taskA = $.Deferred(); 
var taskB = $.Deferred(); 
var taskC = $.Deferred(); 

// Callback starts when all tasks are complete/resolved 
$.when(taskA, taskB, taskC).done(function(results) { 
    var resultA = results[0]; 
    var resultB = results[1]; 
    var resultC = results[2]; 
    // ... 
}); 

// Fire off long tasks 
longTask1(function(result) { taskA.resolve("result"); }); 
longTask2(function(result) { taskB.resolve("result"); }); 
longTask3(function(result) { taskC.resolve("result"); }); 

RxJavaでequivelantがあるべきような気がしますが、私はそれの名前を知りません。

編集:あなたは複数の方法により、複数の観測を組み合わせることができ明確化

/** 
* What I expected to happen: 
* - User has to click buttons A, B and C in order to pass. 
* 
* What actually happens 
* - User clicks any button and passes. 
*/ 
public class RxTestActivity extends AppCompatActivity { 
    PublishSubject<Boolean> subjectClickedA; 
    PublishSubject<Boolean> subjectClickedB; 
    PublishSubject<Boolean> subjectClickedC; 

    @Bind(R.id.btnA) Button btnA; 
    @Bind(R.id.btnB) Button btnB; 
    @Bind(R.id.btnC) Button btnC; 
    @Bind(R.id.labelTest) TextView txtSuccess; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_test); 
     ButterKnife.bind(this); 

     subjectClickedA = PublishSubject.create(); 
     subjectClickedB = PublishSubject.create(); 
     subjectClickedC = PublishSubject.create(); 

     // Create an observer which waits until all 3 tasks are complete before 
     // triggering it's own "onCompleted". 
     Observable.merge(subjectClickedA, subjectClickedB, subjectClickedC) 
      // Ensure all subjects are completed 
      // TODO: doesn't work 
      .all(new Func1<Boolean, Boolean>() { 
       @Override 
       public Boolean call(Boolean aBoolean) { 
        // Won't let anything through until all of tasks are complete 
        return subjectClickedA.hasCompleted() && subjectClickedB.hasCompleted() && subjectClickedC.hasCompleted(); 
       } 
      }) 
      .subscribe(new Subscriber<Boolean>() { 
       @Override 
       public void onError(Throwable e) { 
       } 

       @Override 
       public void onNext(Boolean aBoolean) { 
        // aBoolean value comes in as false 
        Log.e("Subscriber onNext", String.valueOf(aBoolean)); 
       } 

       @Override 
       public void onCompleted() { 
        // This triggers on the first button click (no matter which one) 
        // TODO: reward user 
        Log.e("Subscriber", "all tasks completed!"); 
        txtSuccess.setText("Great success!"); 
       } 
      }); 
    } 

    @OnClick(R.id.btnA) 
    protected void onButtonAClicked() { 
     subjectClickedA.onNext(true); 
//  subjectClickedA.onCompleted(); 

     btnA.setEnabled(false); 
    } 

    @OnClick(R.id.btnB) 
    protected void onButtonBClicked() { 
     subjectClickedB.onNext(true); 
//  subjectClickedB.onCompleted(); 

     btnB.setEnabled(false); 
    } 

    @OnClick(R.id.btnC) 
    protected void onButtonCClicked() { 
     subjectClickedC.onNext(true); 
//  subjectClickedC.onCompleted(); 

     btnC.setEnabled(false); 
    } 
} 

答えて

1

のための私のAndroidのアクティビティコードを追加します。

これを調べてください。 Combining Observables

このセクションでは、複数のObservableを結合するために使用できる演算子について説明します。

  • startWith() - を開始する前に、アイテムの指定されたシーケンスを発する観測
  • マージからアイテムを発する() - オン
  • mergeDelayError()に複数の観測を組み合わせる - 一つに複数の観測結合 error-freeエラーを伝播する前にObservablesを続行する
  • zip() - 2つ以上のObservableによって発行されたObservableのセットを特定の関数を介して結合し、結果に基づいてアイテムを出力するこの関数(rxjava-joins)と()、then()、when-( )は、 によって2つ以上のオブザーバブルから放出されるアイテムのセットを結合します。
  • combineLatestアイテムは二つの 観測のいずれかによって放出される、 指定された関数を介して観測することによって放出された最新のアイテムを組み合わせて、この
  • 参加機能()とgroupJoin()の結果に基づいてアイテムを発する - によって放出されたアイテムを組み合わせ2つの Observableから1つの項目が の範囲内にある場合に、Observablesが表示されます。 Obs ervable
  • switchOnNext() - これらの観測
+0

の放射された最も最近 から放出されたアイテムを発すること 単一観察可能に観測を発する観察可能でうーん、私は何かが足りないかもしれないが、どのように変換します観察可能な/件名自体が完全であるか?私はPublishSubject.onNext(true)とonComplete()を使用していますが、zip() – twig

関連する問題