如何解决如何通过 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 举报,一经查实,本站将立刻删除。