2017-11-17 6 views
0

작업 : 두 가지 효과 (ngrx/store)가 있습니다. ef1 $ 및 ef2 $를 Observables라고합니다. 각 구성 요소에서 어떤 것이 트리거되는지 감지하고 싶습니다. 나는 다음과 같은 코드를 추가 :Observable.race는 두 개의 관측 값에 대해 두 번 이상 작동합니까?

Observable.race(ef1$, ef2$) 
    .subscribe((payload) => { 
      if (payload.type == ThreadActions.THREAD_READY_TO_BE_RENDERED) { 
      // do one thing 
      } 
      else if (payload.type == ThreadActions.THREAD_ITEM_READY_TO_BE_RENDERED) { 
      // do another thing 
      } 
     }); 

을하지만 어떤 효과 Observable.race의 첫 번째 발광 후 I에도 불구하고, 추가를 방출에 더 반응이 더 죽을와 것처럼 그것은 확실히 그 효과는 또 다시 실행 보인다 .

답변

1

그것은 당신이 기능을 원하는하지만 무슨 이야기하기 어렵다 당신은을 사용하려는 경우 그것은 즉시 다시 구독을 방출 할 때 race 연산자를 여러 번 당신은 체인을 완료해야합니다 :

Observable.defer(() => Observable.race(ef1$, ef2$)) 
    .take(1) 
    .repeat() 
    .subscribe(...); 
+0

당신에게 너무 많은 @martin 감사드립니다. 그게 내가 찾고 있던거야. 그러나 저는 재계약의 오버 헤드가 걱정됩니다. –

0

Observable.race()은 방출이 가장 먼저 방출됩니다. 두 개의 관찰 가능한 스트림을 원하고 방출됩니다 누구든지 상관하지 않습니다 당신 일명 동시에 그들을 관찰하는 경우

사용 Observable.combineLatest :

Observable.combineLatest(ef1$, ef2$) 
    .subscribe(([ef1,ef2]) => { 

     //ef1.type will be ThreadActions.THREAD_READY_TO_BE_RENDERED 
     //ef2.type will be ThreadActions.THREAD_ITEM_READY_TO_BE_RENDERED 

     //check if ef1 is truthy 
     if(ef1){ 
      //do one thing 
     } 
     if(ef2){ 
      //do another thing 
     } 
    });