为什么我必须调用 subscribe 才能运行我的 http 请求?

Aub*_*inn 2 http observable angular

我正在使用 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);
  }
Run Code Online (Sandbox Code Playgroud)

Exo*_*mus 7

简短回答:

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

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

长答案:

您需要订阅才能获取 HTTP Post 的返回(例如,如果您的 API 很好地接收了 HTTP Post 并且事务成功,您将获得 201 状态代码。)

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

不订阅,您http.post()将永远不会被解雇。

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

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

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