【问题标题】:why do i have errors inside my subscribe?为什么我的订阅中有错误?
【发布时间】:2021-07-26 10:22:42
【问题描述】:

我在电子商务网站上工作,我的“cartservice”出现错误,尤其是“checkoutFromCart ()”函数,控制台显示的错误如下:

src/app/services/cart.service.ts:218:81 218 this.http.post(${this.serverUrl}orders/payment, null).subscribe((res: { 成功: 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' 类型的参数不能分配给'(value: Object) => void' 类型的参数。 参数 'data' 和 'value' 的类型不兼容。 “对象”类型可分配给极少数其他类型。您的意思是改用“任何”类型吗? “对象”类型缺少“订单响应”类型的以下属性:order_id、成功、消息、产品

228 }).subscribe((data:orderResponse) => { [91m~~~~~~~~~~~~~~~~~~~~~~~~~~~~

node_modules/rxjs/internal/types.d.ts:73:5 73完成:()=>无效; ~~~~~~~~ 这里声明了“完成”。

我的代码: checkoutFonction

控制台错误: error

如果问题错了,我很抱歉,我从 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();
    }
  })
}

【问题讨论】:

  • getSingleOrder 是 Promise 还是 observable?顺便说一句,您可以使用 rxjs 运算符 switchMap 或其他“concat”可观察对象
  • 尽量不要发布代码图片,而是将代码粘贴到此处。

标签: javascript angular typescript


【解决方案1】:

您可以像这样在 post 方法中定义返回类型:

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

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

【讨论】:

    猜你喜欢
    • 2018-01-26
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多