当subscribe()完成时执行某些操作

问题描述 投票:1回答:1

我在组件中有这个代码,我在控制台中看到的是这条消息:'来自组件1:任务开始'。所以它正在从服务中正确获取响应,但一旦完成,我想打印消息'成功!!'而这种情况从未发生过......当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);
    }
}
angular observable subscribe
1个回答
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();
}

你什么时候打电话给它

onOtherClick() {      
  this.service.completeMission();
}
© www.soinside.com 2019 - 2024. All rights reserved.