首页 > 解决方案 > 为什么我的订阅中有错误?

问题描述

我在一个电子商务网站上工作,我的“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();
    }
  })
}

标签: javascriptangulartypescript

解决方案


您可以在 post 方法中定义返回类型,如下所示:

this.http.post<{success: boolean}>().subscr...

this.http.post<orderResponse>().subscr...

推荐阅读