微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何通过 observables 从后端接收多个值

如何解决如何通过 observables 从后端接收多个值

我有以下发布的服务,该服务连接到后端,作为来自后端的响应,我希望有两个值 x1 abd x2 我想知道如何修改下面的代码以便能够接收两个值

代码

public startWebService(fieldGeometry) {
var endpointURL = 
this.buildEndpointURLForLIDARWebService(fieldGeometry);
return this.httpClient.get(endpointURL)
  .subscribe((responseFromBackend)=>{
    {x1,x2} = responseFromBackend;
});
}

更新

响应来自 python 代码调用的 webservice 将返回两个值,假设 x1 和 x2。

解决方法

我建议您从后端获取响应作为 JSON 对象,因此是键值对对象。因此,您可以使用它们的密钥访问这些属性。您不需要将它们“映射”到额外的对象。因为 Angular 使用的是 TypeScript,所以我建议你声明一个对象的接口,这里是一个例子:

export interface MyObject {
    x1: number;
    x2: number;
}

当您稍微修改您的请求时,您可以在订阅中访问这些值。要说 TS 响应具有哪些属性,请使用您的界面。如果我理解正确,您想将响应保存在类的变量中,因此请先声明它(您需要 undefined 或 null,因为 http 客户端异步工作,并且页面加载响应时可能需要一些时间):

myObject: MyObject | undefined | null;

然后在你的方法中你订阅了 observable,它是 http-client 的返回类型,并将数据保存在你的 myObject 变量中:

public startWebService(url: string): void {
    this.httpClient.get<MyObject>(url)
        .subscribe(data => {
            myObject.x1= data.x1;
            myObject.x2= data.x2;
        });
}
,

如下修改您的服务代码以从后端接收两个空格分隔的值:

public startWebService(fieldGeometry) {
  var endpointURL = this.buildEndpointURLForLIDARWebService(fieldGeometry);
  this.httpClient.get(endpointURL).subscribe((responseFromBackend)=>{
    result = {x1: null,x2: null};
    result.x1,result.x2 = responseFromBackend.split(' ');  // assuming values are space separated
    return result;
  });
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。