我有一个需要根据用户输入调用的http服务。
saveImage(): Observable<Photo> {
if (!this.squaredImage) {
return Observable.of();
}
this.photoCreateDto = {
sourcePhoto: this.sourceImage,
squaredPhoto: this.squaredImage,
fileExtension: this.fileExtension
};
return this.photoService.createPhoto(this.photoCreateDto);
}
我从另一个保存功能调用saveImage
:
save() {
this.saveImage().subscribe((newPhoto: Photo) => {
.. never gets here
});
}
如果this.squaredImage
没有值且返回空承诺,则链结束。如果调用了createPhoto
服务,它将继续。我也尝试过返回Observable.empty()
。你如何在rxjs中处理这种情况?
答案 0 :(得分:4)
问题是您只使用以下内容处理next
通知:
this.saveImage().subscribe((newPhoto: Photo) => { ... });
...虽然Observable.of()
或Observable.empty()
不会发出任何next
(他们只是发送complete
次通知)。
所以你可以做的一件事是发出例如null
,然后在订阅者中检查你发送了什么值:
saveImage(): Observable<Photo> {
if (!this.squaredImage) {
return Observable.of(null);
}
...
}
...
this.saveImage().subscribe((newPhoto: Photo) => {
if (newPhoto === null) {
// ...
}
// ...
})
或者您可以收听next
和complete
通知(但请注意,当您返回this.photoService.createPhoto
时,可能还会发送complete
通知:
this.saveImage().subscribe({
next: (newPhoto: Photo) => {...}
complete: () => { ... }
})