在使用observable更新用户配置文件之前上载图像(如果存在)

时间:2018-03-20 09:07:31

标签: angular observable

我是新手使用的观察者,我现在很迷茫。我正在开发一个更新用户配置文件的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(...);
    }
}

1 个答案:

答案 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(...)
}