angular - 角度发布工作第二次或第三次 HTTP Post
问题描述
我知道这是异步的问题,但是如果我添加了 .subscribe 并且我正在等待消息,为什么我会遇到这个问题
我的代码
public redirectToDelete = (id: string) => {
this.carService.getId(id).subscribe(result =>
new alert(this.carService.delete(result)));
}
这是删除
deleteUrl = "/car/delete.php";
delete(car: Car): any {
this.http.post(this.deleteUrl, car)
.subscribe(res => {
return res;
},
(error => {
return error;
})
)
return "";
}
解决方案
- 您需要返回 observable:
return this.http.post(this.deleteUrl, car)....
。否则,您将尝试调用subscribe
空字符串。 - 您还应该指定返回类型而不是
any
在您的方法上,这样您就具有类型安全性,这是使用 typescript 的主要好处之一。 - 你的
delete
方法应该返回 observable,而不是订阅。直接返回调用post
。 - 使用泛型重载来
HttpClient
保证类型安全。
delete(car: Car): Observable<YourTypeHere> {
return this.http.post<YourTypeHere>(this.deleteUrl, car);
}
import { switchMap } from 'rxjs/operators';
public redirectToDelete = (id: string) => {
this.carService.getId(id)
.pipe(switchMap(r => this.carService.delete(r))) // ← switchMap is handy here, alternatively you could call the next service end point in a subscribe and then have a nested subscribe but this makes for messier code IMO
.subscribe(result => new alert(result));
}
附带说明一下,如果您正在构建一个提供删除功能的 RESTful 服务,那么我建议您设置一个使用 http DELETE 动词而不是 post 的端点。
推荐阅读
- dart - 导航到新路线时释放小部件
- python - 标记变量 pd 数据框
- javascript - 每个人的下拉值都是唯一的,来自三个下拉框 jquery 的值不同
- amazon-web-services - 如何将 SpringBoot 微服务应用程序(RESTful)作为无服务器部署到 AWS Lambda?
- javascript - Google Apps Script: submit form + keep window content + make browser make an offer to save name/password
- machine-learning - 任意大动作/状态空间中的强化学习
- oracle - 使用 GET_FILE_NAME Oracle Forms 无法打开对话框
- javascript - Edittext 箭头 [Indesign 脚本]
- python - 在python中绑定两个csv
- powerbi - 按总和对类别进行排名 (Power BI)