2017-02-08 20 views
0

Observablesとまだ苦労しています。複雑なロジックと複数のリクエストとレスポンスを持つ複雑なREST APIクエリ関数をコーディングしています。サブスクリプションのチェーンが終了するのを待つ方法は?

私はすでに、私は混乱していると思いますが、このようなサブスクリプションに

function1(){ 
    thisReturnsAnObservable() 
    .subscribe(); 
} 

function2(){ 
    thisReturnsAnObservable() 
    .subscribe(); 
} 

function3(){ 
    thisReturnsAnObservable() 
    .subscribe(); 
} 

そして、複数のクエリを持つ関数では、私はこの

complexFunction(){ 
    function1(); 
    function2(); 
    function3(); 
    if (aVariableChangedBy123 == true){ 
    doSomething(); 
    } 
} 

のようにそれをコーディングする機能の多くを書きました私は間違っていると証明しています。なぜなら、変数aVariableChangedBy123はfunction1,2,3が終了する前に常に評価されるからです。aVariableChangedBy123はfunction1,2,3が1つずつ順番に処理された後にのみ確実になります。これらの機能を連鎖させる機能イオンを購読して、順番に実行させるのですか?

私はすべてのfunction1,2,3を書き直すような方法があることは知っていましたが、他の状況で再利用できるので、それらの関数を書く必要はありませんか?

then()のような連鎖可能な関数flatMap()を使用しようとしましたが、すべてのfuntion1,2,3がvoid関数なので、コードは常に実行時にエラーCannot read property 'flatMap' of undefinedのようになります。

私は道を得ましたが、それが正しいかどうかわかりません。

Observable.forkJoin(Observable.of(function1),Observable.of(function2)).subscribe() ; 

よう

は、この実行可能ですか?私はそれを静的に使用することはできません...

+0

彼らは私のために働いていないように見える 'flatMap'(rxjs5となりまし' mergeMap')と 'forkJoin' – echonax

+0

ためのチェックは、時々彼らはちょうど私のボイドを与える[]型SubscribableOrPromiseのパラメータに割り当てられないエラー –

答えて

0

演算子はmapまたはswitchMapで、それぞれの関数はサブスクリプションを返して次の関数に進む必要があります。このようにして、あなたは最後の方法でのみ購読し、機能はシーケンスで実行されます。

+0

があります私はこれらのvoid関数を変更する必要はありません。 –

関連する問題