【发布时间】:2017-10-27 07:19:08
【问题描述】:
在我的服务类中,我正在循环一个 http get 请求并使用 rxjs forkJoin 将所有响应组合成一个 observable,我将它返回到我的组件。对于每个返回的响应,我需要向 json 添加两个属性(readySystem 是一个对象,serviceType 是一个字符串)。对于循环的每次迭代,它们中的每一个的值都是不同的。
如何保留/存储/保留 and 的值并将它们映射/添加到正确的响应中?
按照我在下面尝试的方式,在最终 observable 中返回的每个响应中,两者的值都是相同的。
getServices() {
for (var x = 0; x < this.service.items.length; x++ ){
var num = Object.keys(this.service.items[x].links).length;
for (var key in this.service.items[x].links) {
var systemName = this.service.items[x].systemName;
var environment = this.service.items[x].environment;
var server = this.service.items[x].server;
var port = this.service.items[x].port;
var linkName = this.service.items[x].links[key];
var serviceType = key;
this.observables.push(
this.http.get('http://localhost:3000/myapi/get/service?server=' + server + '&service=' + linkName)
.map((res:Response) => {
var output = res.json()
for (var obj in output) {
if (output.hasOwnProperty(obj)){
var readySystem = new System(systemName,
environment,
server,
port,
linkName);
output[obj].System = readySystem;
output[obj].serviceType = serviceType;
}
}
return output;
})
);
}
};
return Observable.forkJoin(this.observables);
};
更新:根据下面答案中提供的建议代码更改,我得到如下输出:
0: Array(33)
1: System
systemName: "my system"
environment: "my environment"
etc.
2: "myservice"
3: Array(35)
4: System
etc.
5: "myotherservice"
但是,需要的是:
0: Array(33)
0: Object
> System
systemName: "my system"
environment: "my environment"
etc.
serviceType: "myservice"
1: Object
> System
systemName: "my system"
environment: "my environment"
etc.
serviceType: "myotherservice"
etc.
1: Array(35)
0: Object
【问题讨论】:
标签: angular http asynchronous rxjs observable