2017-12-26 40 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(); 
} 
関連する問題