2016-05-31 3 views
6

내 경우는 일반적이지만 실제로는 적절한 것이 없다고 생각합니다. 내가 Angular2/RxJS 5에 달성하고자하는 것은 이것이다 : 그래서소스에서 다음 값 방출 다른 Observable, notifier가 나올 때 Observable을 내 보냅니다.

source: ---1--2--3--4---------5--------6-|--> 
notifier: -o------------o-----o---o--o-o------> 
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
output: ---1----------2-----3---4--5---6-|--> 

, 나는 값을 방출 관찰 가능한 소스를 가지고 있고, 나는 출력에 들어가 그들 각각을 원하는 경우에만 (호출 두 번째 관찰 가능한 알리미)가 방출됩니다. 이는 알리미가 "다음 통과 허용"과 같은 하나의 이벤트와 같습니다.

나는 delayWhen을 시도했지만 이것에 대한 나의 주된 문제점은 모든 소스 값이 알리미로부터 동일한 이벤트를 기다리고 있다는 것입니다. 예를 들어, 3 개의 소스 값이 "대기 중"이고 알리미가 한 번, 3 개의 값 모두를 내면 통과해라, 나는 그것이 원하는 것이 아니다.

답변

2

대답은 zip 다음과 같습니다 :

const valueStream = 
    Rx.Observable.from([0, 1, 2, 3, 4, 5, 6]); 

const notificationStream = 
    Rx.Observable.interval(1000).take(7); 


Rx.Observable 
    .zip(valueStream, notificationStream, (val, notification) => val) 
    .subscribe(val => console.log(val)); 

예를 here 작업

또한이 질문을 참조하십시오.

두 스트림에서 쌍이 생성 될 때 값을 생성합니다. 따라서이 예제는 notificationStream 값을 생성 할 때 valueStream 값을 인쇄합니다.

1

은 내가 zip 운영자가 당신이 찾고있는 무엇이라고 생각 : https://plnkr.co/edit/MK30JR2qK8aJIGwNqMZ5?p=preview :

sourceSubject:Subject = new Subject(); 
notifierSubject:Subject = new Subject(); 

index = 1; 

constructor() { 
    Observable.zip(
    this.sourceSubject, this.notifierSubject 
) 
    .map(data => data[0]) 
    .subscribe(data => { 
    console.log('>> output = '+data.id); 
    }); 
} 

emit() { 
    this.sourceSubject.next({id: this.index}); 
    this.index++; 
} 

notify() { 
    this.notifierSubject.next(); 
} 

이 plunkr를 참조하십시오.