2017-02-04 12 views
1

私はここでその考え方を理解しようとすると、リアクティブプログラミングに直面しています。私は問題hereを得ました、そして、それは解決されたようですが、私にもう少し質問を残して、それらの1つはフィルターです。ここで私は私がなどconcatMapようなツール文の一部、takefromを理解だと思う私はOLSNの答え、ObservablesのRxJSまたはAngular2のフィルタにサブスクライブする方法は?

function myLoop(item_array) { 
    return Observable.from(item_array) 
     // if you don't mind the execution-order you can use "mergeMap" instead of "concatMap" 
     .concatMap(item => configHardwareMock(item) 
      .switchMap(resultId => Observable.interval(500) 
       .do(() => console.info("Checking status of: " + resultId)) 
       .switchMap(() => intervalCheckingStatus(resultId)) 
       .filter(status => Boolean(status)) // your logic if the status is valid, currently just a boolean-cast 
       .take(1) // and complete after 1 value was valid 
       .mapTo(item) // map back to "item" so we can notify the subscriber (this is optional I guess and depends on if you want this feature or not) 
      ) 
     ); 
} 

//an example of such boolean from olsn 
function intervalCheckingStatus(resultId) { 
    if (Math.random() < .4) { 
    return Observable.of(false); 
    } 

    return Observable.of(true); 
} 

から借りたいくつかのコードは、今では.filter(status => Boolean(status))あるので、私は別の深刻なを置くために何を持っている場合はさこのブール関数でのREST APIリクエスト/通信には、別のsubscrible()コードが含まれている可能性があります。そのようなフィルターを壊すのだろうか?物事(出来事)はどのような順序で流れますか?このハードウェア通信は正常ですか(非強力なハードウェアなので)非同期ではないはずですか?

+0

これは '.filter()'演算子で何をしたいかによって決まります... – martin

+3

なぜ 'subscribe()'を 'filter()'に入れたいのですか?達成すべきと思う方法ではなく、達成したいことを説明することで、あなたの質問を言い換えることができますか? – AngularChef

+0

フィルタアクションはREST APIリクエストとレスポンスと解析関数が深刻であるため、subscribe()を含む関数を再利用することがあります。 –

答えて

0

質問に答えるには、filter()に別のsubscribe()を追加することはできません。

フィルタリングする値を決定するために、別の非同期関数(REST API呼び出しなど)を実行する場合は、.flatmap()演算子で連結する必要があります。

関連する問題