【问题标题】:Getting a specific Observable value获取特定的 Observable 值
【发布时间】:2020-07-07 11:20:54
【问题描述】:

所以目前我正在尝试从此响应正文中检索monthlyFee 值。

【问题讨论】:

  • 您对console.log(this.currentPlan); 有什么看法?您想从中获取哪些数据?
  • 你能在 stackblitz 中重现这个问题吗?看起来响应不是您期望的类型(数组),我仍然不确定您要从响应中提取什么数据。
  • Typescript 你在Angular 中使用的被编译成JS,所以当你调用http.post 时,可能会有不同类型的对象,你在typescript 中声明班级。您必须使 1:1 表示对象(或您需要的至少字段)才能使其正常工作。

标签: angular typescript rxjs angular8


【解决方案1】:

getCurrentPlan 函数中设置响应类型:

      .subscribe((currentPlanResponse: CurrentPlan[]) => {
        let currentPlan: CurrentPlan[] = currentPlanResponse;
        console.log('monthlyFee: ', 
          currentPlan[0].planGroupMap.sharePlans.plans[0].monthlyFee);
      });

请记住,您正在获取一个数组(或嵌套数组),因此这取决于您要对最终结果做什么,但上面显示了谁获取嵌套值。

查看我根据您的代码制作的 StackBlitz:https://stackblitz.com/edit/rxjs-aesbq2

我评论了您代码的某些部分,以便不创建整个服务和 http 请求,但正如您所说,这不是您的实际问题。

【讨论】:

  • 正如 Kurt Hamilton 所说,您应该使用您的代码创建一个 Stackblitz。也许问题出在您的retrieveCurrentPlan 方法中。实际上,您正在发送一个 POST 请求,这可能是正确的(您本来希望它是一个 GET 请求),但是您必须检查要发送到后端的数据。问题可能是您的 planGroupMap 未定义,但您的后端需要该属性。
  • this.currentPlan 是对象还是数组?如果它是一个数组,那么您应该选择,例如,第一项:this.currentPlan[0]
  • 如何声明currentPlan?你有currentPlan: CurrentPlan[]吗?无论如何,你应该发布更多可以。没有它,很难说发生了什么。
【解决方案2】:

您必须检查您实际接收到的json 数据,并使用. 运算符获取所需字段,就像您平时所做的那样。但是,要做到这一点,有两种方法可以做到。首先你可以创建一个class/interface,它代表json。其次,不需要创建class/interface,但维护它会有点困难。因此,现在您有两种方法可以做到这一点,具体取决于用例。首先,订阅callback,您可以访问它。其次,您可以使用pipemap 运算符将结果映射到您的服务中:

this.http.post(...).pipe(map(value => value.property))

然后你从backend收到的对象将被映射到property

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 2014-06-14
    相关资源
    最近更新 更多