2017-10-05 7 views
0

나는 내가 찾을 수있는 모든 것에 대해 시도해 보았고,이 구간을 구독 내부에서 코드하는 것을 멈추는 것처럼 보이지는 않는다. 간격을 잘못 사용하고 있습니까? 에서Observable interval을 멈출 수 없다

var subject = new Subject(); 
var interval = Observable.interval(this.settings.timing * 1000); 
var subscription = interval 
    .takeUntil(subject) 
    .subscribe(t => { 
    console.log('pushing new item'); 
    this.activeItems[0].contentLeaving = true; 
    setTimeout(()=>{ 
    this.activeItems[0].imageLeaving = true; 
    setTimeout(()=>{ 
     this.activeItems.push(this.activeItems.shift()); 
     setTimeout(()=>{ 
     this.activeItems[1].contentLeaving = false; 
     this.activeItems[1].imageLeaving = false; 
     },510); 
    },510); 
    },510); 
}); 
this.moduleProps.intervals.push(subject); 

this.moduleProps.intervals.forEach((i)=>{ 
    i.complete(); 
}); 

그러나 ngOnDestroy이 난 아직도 콘솔 로그 문은 여전히 ​​내 간격에서 실행중인 것처럼 "새 항목을 밀어"라고 볼 일 후.

+0

당신은()()'안에'가입 subscription.unsubcscribe'호출 할 수 있습니다 다음이다. 또는 어쩌면 나는 당신이하고 싶은 것을 이해하지 못한다 ... – martin

답변

0

이 설명서 (https://www.learnrxjs.io/operators/filtering/takeuntil.html)에 따라 takeUntil은 제공된 관찰 가능 항목이 방출 될 때까지 방출됩니다. 당신은 아무것도 방출하지 않고 관측을 완료하고 있습니다. onDestroy 메소드에 .next()를 추가하십시오. 여기

this.moduleProps.intervals.forEach((i)=>{ 
    i.next(); // have subject emit 
    i.complete(); 
}); 

이 작업 쿵하는 소리입니다 ( https://plnkr.co/edit/Zdf8C9d8vHk84uIMYHvH?p=preview)

+0

나는 또한 그것을 시도했다. 또한 .next()는 뭔가를 되돌려 보내고 간격은 계속 유지된다. – Jordan

+1

@Jordan, 방금 구간 예약을 저장 한 다음 ngOnDestroy에서 구간 예약을 취소 할 수 있습니까? takeUntil 연산자 대신 – LLai

+0

을 사용해 보았습니다. 그 중 하나는 작동하지 않습니다. 흥미롭게도, 타임 아웃 내에 설정 한 직후에'.next()'와'.compelte()'를 호출하려고하면 모든 것이 완벽하게 작동합니다. 나중에 참조를 사용하려고 할 때만 작동하지 않습니다 – Jordan

0

.takeWhile 대신 .takeUntil, 그것은 부울를 사용하십시오.

private finished = false; // component property 

var interval = Observable.interval(this.settings.timing * 1000); 
var subscription = interval 
    .takeWhile(_ => this.finished) 
    .subscribe(t => { 
    ... 

들의 OnDestroy는`단순히 this.finished = true;

+0

takeWhile은 단지 부울이 아닌 부울을 반환하는 함수를 사용합니다. – LLai

+0

실제로 수정 중입니다 ... –