繁体   English   中英

Angular Http Post Observable 不触发订阅

[英]Angular Http Post Observable not triggering subscribe

我不确定我是否完全理解 Angular 中的 Observables,因为我的 Observable 没有“触发”或在调用时从 subscribe 获取任何信息。 我正在制作一个简单的登录系统,并试图从 Http 帖子中获取成功的消息,我的用户服务中有以下 Observable 函数

addUser(user: User) : Observable<any> {
    var headers = new HttpHeaders()
    headers.append('Content-Type', 'application/json');

    return this.http.post('http://localhost:4000/api/users/add', user,{headers:headers}).pipe(
        map((response: any) => response.json())
    );
}

然后我有一个带有函数onSubmit的注册组件,该函数在提交表单时被调用。 此函数从服务调用addUser以将新用户发送到 API 并将其添加到数据库中。

onSubmit(): void {
    this.userService.addUser(this.user)
        .subscribe(res => {
            console.log("Registration successful");
            this.isSuccessful = true;
        },
        err => {
            console.error("Registration failed: " + err);
            this.isSignUpFailed = true;
        }
    );
}

Http post 调用有效,我的 API/Backend 接收数据并成功将用户添加到数据库。 我的问题是在 Angular 中,Observable 永远不会提供成功的信息或响应,这意味着它永远不会在onSubmit函数的订阅调用中执行以下操作

console.log("Registration successful");
this.isSuccessful = true;

我相信这是由于我对 Observables 的误解,但即使查看了其他几个示例,我也不确定如何解决它。

只需移除管道,它就可以正常工作,不需要 response.json

检查您的控制台,您会发现类似这些错误的内容

Registration failed: TypeError: response.json is not a function
addUser(user: User): Observable<any> {
    var headers = new HttpHeaders();
    headers.append("Content-Type", "application/json");
 
    return this.http
      .post("https://jsonplaceholder.typicode.com/posts", user, {
        headers: headers
      })
  }

事实证明它与 Angular 无关。 愚蠢的错误,问题是我的 API 在调用 post 后没有发送任何信息,它会将数据添加到数据库但不返回任何类型的消息,这就是 Observable 没有反应的原因。 简单地说,我使用了一个 Observable,它调用了一个操作数据的函数,即 HTTP 请求,但什么都不返回。 我的假设是 HTTP 状态会自动为 Observable 返回一些东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM