首页 > 解决方案 > 为什么我必须调用 subscribe 才能运行我的 http 请求?

问题描述

我正在使用 Angular 8 开发一个项目。我正在构建一个“忘记密码”页面,当用户单击提交按钮时,它将调用 2 个后端端点。

这是我的代码,但我没有可以公开的任何测试网址:https ://stackblitz.com/edit/angular-8-app-example-zxzvt5

为了让我的 http 请求得到执行,我必须在这个服务中调用它们:ForgotPasswordDataService

为什么我必须这样做?

如何更改我的代码以便我不需要订阅并且我想路由到我的组件中的下一页而不是我的服务?例如

  public onSubmit() {
    console.log(' on submit ');
    //submit to the server
    //route to the next page
    this.forgotPasswordDataService.forgotPassword(this.clientcode, this.email).subscribe(() => //TODO: route to the next page);
  }

标签: angularhttpobservable

解决方案


简短的回答:

http.post()它存在于您的服务中,正在返回一个 Observable。您需要订阅 Observables,以便它们被触发,它们将触发subscribe()异步传入的回调以对结果执行操作。

https://rxjs-dev.firebaseapp.com/guide/observable

长答案:

您需要订阅才能获得 HTTP Post 的返回(例如,如果 HTTP 帖子被您的 API 良好接收并且交易成功,您将获得 201 状态码。)

这样,您可以处理多种返回状态码的情况(例如,当您的请求格式错误或资源已被移动时,您会怎么做。

没有订阅,你http.post()永远不会被解雇。

编辑:如何处理您的导航问题?

您可以将导航代码放在订阅部分。

例如,.subscribe(() => this.router.navigate(//... route)) 当 http.post() 将返回一个状态码(可能您需要处理多种情况)时,您将被重定向到给定页面。


推荐阅读