从 firebase 捕获异常 - AngularFire2

Catch exception from firebase - AngularFire2

我有以下位于服务中的方法,这个方法特别保存用户配置文件,没什么好激动的。

// Save user Profile
saveProfile(user: User): Observable<Response> {

    return Observable.fromPromise<Response>(

        this.af.database.object('/users/' + user.userId).update({
            first_name: user.first_name,
            display_name: user.display_name,
            biography: user.biography,
            intent: user.intent,
            seeking: user.seeking,
            training: user.training,
            dayDOB: user.dayDOB,
            monthDOB: user.monthDOB,
            yearDOB: user.yearDOB,
            hobbies: user.hobbies,
            last_name: user.last_name,
            gender: user.gender,
            address: user.Address
        }).then((profile: any) => {
            return new Response('Profile has been saved successfully', true);
        })
            .catch((err: any) => {
                return new Response('Unable to save profile at this time, please try again later.', false);
            }) as Promise<Response>
    )

}

如您所见,return类型为 ReponsePromise 这是我的自定义 class,其中包含一个 string 和一个 boolean 我根据更新是否成功填充这些值。然后我在我的组件中引用 boolean 值来决定下一步做什么。

我遇到的问题是,当我使此方法失败时,它没有 return 方法的 catch 部分中指定的内容,也没有 console.log 任何内容我指定的自定义文本只是写入以下内容:

我已经搜索了 firebase 文档,但无济于事,有没有人遇到过这种情况?你设法解决了吗?

但是说真的,如果你不能捕获这些异常,为什么还要麻烦 .catch

您收到的错误本质上是断言错误;这不是从 Firebase 数据库收到的错误。

您向 update 方法传递了它认为无效的参数,因为 address 属性 是 undefined.

当接收到无效参数时立即抛出同步错误是 Firebase JavaScript 客户端的作者做出的决定,并且不太可能改变。您必须确保传递给它有效的输入。