在我的服務類中,我正在循環一個http get請求,並使用rxjs forkJoin將所有響應組合到一個observable中,並將其返回給我的組件。對於每個返回的響應,我需要向json添加兩個屬性(readySystem是一個對象,serviceType是一個字符串)。每個循環的迭代值都是不同的。角度循環HTTP請求映射值到響應
我該如何保存/存儲/保留和and/map值並將它們添加到正確的響應中?
以我試圖在下面做的方式,兩者的值在最終可觀察值中返回的每個響應中都是相同的。
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
謝謝。我明白這個函數在做什麼,但是{ready:true}的目的是什麼,我應該在什麼時候和從哪裏調用這個函數呢? – HendPro12
在一個循環中,你創建了一個可觀察對象的數組,這個對象將執行http調用,正如我所理解的,你爲每個forkJoin - readySystem和serviceType創建了兩個變量。因此,您只需使用Observable.of將它們添加到可觀察數組中,並執行與現在一樣的返回。 –
我的forkJoin發生在我的內部和外部循環外的return語句中。我相信我需要將內部循環中的兩個變量添加到每個單獨的observables中,然後將它們推入到我的observable數組中。 – HendPro12