我是新手使用的观察者,我现在很迷茫。我正在开发一个更新用户配置文件的Angular组件。用户可以选择个人资料图片(需要首先上传以获取ID),或者通过将图像设置为空来删除图像。处理完图像后,将更新配置文件数据。下面是我目前拥有的简化代码。我相信必须有一种更优雅的方式来做到这一点。是否需要许多订阅,是否可能只有一个订阅?对我来说最烦人的是订阅中的订阅(在地图之后),但我无法弄清楚如何摆脱它。
save() {
if (this.newImage !== undefined) {
// User wants to remove profile picture
if (this.newImage === null) {
this.form.get('profileImageId').setValue(null);
this.userService.update(this.form.value).subscribe(...);
}
// User wants to upload a new profile picture
else if (this.newImage instanceof File) {
this.fileService.upload(this.newImage)
.map((res: FileUploadResult) => {
this.form.get('profileImageId').setValue(res.id);
return this.userService.update(this.form.value);
}
)
.subscribe((obs: Observable<User> => {
obs.subscribe(...);
});
}
} else {
// newImage is undefined, do not worry about image and just save user data
this.userService.update(this.form.value).subscribe(...);
}
}
答案 0 :(得分:1)
这样的事情可能有用:
save(){
let $image = Observable.of("empty");
if(image !== null){
$image = this.fileService.upload(this.newImage)
}
$image.switchMap(() => {
return this.userService.update(this.form.value)
}).subscribe(...)
}