javascript - 为什么我的订阅中有错误?
问题描述
我在一个电子商务网站上工作,我的“cartservice”出现错误,特别是“checkoutFromCart ()”函数,控制台显示的错误如下:
src/app/services/cart.service.ts:218:81 218 this.http.post( ${this.serverUrl}orders/payment
, null).subscribe((res: { success: boolean }) => { ~~~~~~~ '成功'在这里声明。
错误:src/app/services/cart.service.ts:228:24 - 错误 TS2769:没有重载匹配此调用。Overload 1 of 5, '(observer?: NextObserver | ErrorObserver | CompletionObserver | undefined): Subscription',给出了以下错误。'(data: orderResponse) => void' 类型的参数不可分配给 'NextObserver | 类型的参数 错误观察者 | 完成观察者 | 不明确的'。“(数据:orderResponse)=> void”类型中缺少属性“完成”,但在“CompletionObserver”类型中是必需的。重载 2 of 5, '(next?: ((value: Object) => void) | undefined, error?: ((error: any) => void) | undefined, complete?: (() => void) | undefined): Subscription',给出了以下错误。'(data: orderResponse) => void' 类型的参数不可分配给 ' 类型的参数 (值:对象)=> void'。参数 'data' 和 'value' 的类型不兼容。“对象”类型可分配给极少数其他类型。您的意思是改用“任何”类型吗?“对象”类型缺少“orderResponse”类型的以下属性:order_id、成功、消息、产品
228 }).subscribe((data:orderResponse) => { [91m ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
node_modules/rxjs/internal/types.d.ts:73:5 73 完成:() => void;~~~~~~~~ 这里声明了“完成”。
我的代码: checkoutFonction
控制台错误: 错误
如果问题是错误的,我很抱歉我开始使用stackoverflow,但请我需要帮助
对不起,这里的图片是代码:
CheckoutFromCart(userId: number) {
this.http.post(`${this.serverUrl}orders/payment`, null).subscribe((res:{ success: boolean }) => {
console.clear();
if (res.success) {
this.resetServerData();
this.http.post(`${this.serverUrl}orders/new`, {
userId: userId,
products: this.cartDataClient.prodData
}).subscribe((data:orderResponse) => {
this.orderservice.getSingleOrder(data.order_id).then(prods => {
if (data.success) {
const navigationExtras: NavigationExtras = {
state: {
message: data.message,
products: prods,
orderId: data.order_id,
total: this.cartDataClient.total
}
};
this.router.navigate(['/thankyou'], navigationExtras).then(p => {
this.cartDataClient = {prodData: [{incart: 0, id: 0}], total: 0};
this.cartTotal$.next(0);
localStorage.setItem('cart', JSON.stringify(this.cartDataClient));
});
}
});
})
} else {
this.router.navigateByUrl('/checkout').then();
}
})
}
解决方案
您可以在 post 方法中定义返回类型,如下所示:
this.http.post<{success: boolean}>().subscr...
和
this.http.post<orderResponse>().subscr...
推荐阅读
- mysql - 如果值为零则选择全部,否则选择条件mysql存储过程
- matlab - MATLAB:计算表列中的标点符号
- java - 我必须输入名字、姓氏、学生 ID 和平均值,并将其显示在新 csv 文件上用逗号分隔的行上。我该怎么做呢?
- ruby-on-rails - 如何在系统测试中测试 ActionText rich_text_field?
- google-cloud-platform - 如何使用 gcloud cli 获取操作系统类型
- javascript - Google App Script - TypeError:无法读取未定义的属性“名字”(第 13 行,文件“代码”)
- powershell - 无法将 JSON 流数据引入 Azure 事件中心
- mysql - 如何将 Info Application Studio OLAP CUBE 链接到 SSIS?或者我可以将 OLAP DB 转换为 MySQL 吗?
- php - 致命:无法更新 ref 'HEAD':无法附加到 '.git/logs/HEAD':权限被拒绝
- python - 在 Python 中使用 win32.com 取消隐藏分组列