angular - 为什么我必须调用 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);
}
解决方案
简短的回答:
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() 将返回一个状态码(可能您需要处理多种情况)时,您将被重定向到给定页面。
推荐阅读
- c# - 如何让 UWP GridView 用鼠标滚轮水平滚动
- python - 如何使用“pymqi”Python 库在队列管理器中配置 CCSID 值?
- r - 如何使用 if 和函数在 R 中的传单中添加弹出窗口?
- xml - 如何使用 xslt 从输入 xml 中获取重复属性的值到单个值
- amazon-web-services - AuthorizationException: 请求中包含的安全令牌已过期
- django - Django 约束:如果外键为空,则字段必须为真
- nlp - 如何对德语文本进行词形还原?
- parse-platform - 如何在 $in 包含 null 的 JS 中创建聚合查询?
- azure-web-app-service - 使用自动化对 VNet 的应用服务访问限制
- typescript - 打字稿创建索引签名以代理对子对象的访问