2017-12-26 18 views
1

이 코드가 구성 요소 안에 포함되어 있는데 콘솔에 표시되는 내용은 '구성 요소 1 : 미션 시작됨'입니다. 서비스에서 응답을 제대로 받고 있지만 일단 완료되면 '성공했습니다!'라는 메시지를 인쇄하고 싶습니다. 그리고 그것은 결코 일어나지 않습니다 ... subscribe()이 완료되면 어떻게해야합니까?subscribe() 완료시 무언가 수행

onClick() {  
    this.service.announceMission('mission started'); 
    this.service.missionAnnounced$.subscribe(response => console.log('from component 1: ' + response), 
     error => console.log('error: ', error), 
     () => console.log('successed!!')); 
} 

그리고 이것이 내가 내 서비스에있는 코드 :

export class MissionService { 
    // Observable string sources 
    private missionAnnouncedSource = new BehaviorSubject("not started yet"); 
    private missionConfirmedSource = new BehaviorSubject("not started yet"); 

    // Observable string streams 
    missionAnnounced$ = this.missionAnnouncedSource.asObservable(); 
    missionConfirmed$ = this.missionConfirmedSource.asObservable(); 
    // Service message commands 
    announceMission(mission: string) { 
     this.missionAnnouncedSource.next(mission); 
    } 
    confirmMission(astronaut: string) { 
     this.missionConfirmedSource.next(astronaut); 
    } 
} 

답변

3

피 감시가 완료되지 않습니다 당신이 그렇게 말할 때까지. 출력 부착

const mySource = new Subject<string>(); 

mySource.subscribe(
    (value: string) => {console.log('value: ', value)}, 
    (error: any) => {console.error(error)}, 
() => {console.log('completed')}, 
); 

mySource.next('a'); 
mySource.next('b'); 
mySource.next('c'); 
subject.complete(); 
mySource.next('d'); 

:

value: a 
value: b 
value: c 
completed 

d가 완료된 후에 기록되지 않을 것이다.

따라서 귀하의 경우 원본 제목을 완성하는 completeMission() 함수를 추가해야합니다.

completeMission() { 
    this.missionAnnouncedSource.complete(); 
    this.missionConfirmedSource.complete(); 
} 

당신이 wan't 때 전화

onOtherClick() {  
    this.service.completeMission(); 
}