私のサービスクラスでは、http取得要求をループしていて、rxjs forkJoinを使用して、すべての応答をコンポーネントに返す観測値に結合します。戻ってくる応答ごとに、jsonに2つのプロパティを追加する必要があります(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に対して2つの変数が作成されることがわかります。したがってObservable.ofを使用して観測可能な配列にそれらを追加するだけで、同じ結果が得られます。 –
私のforkJoinは、私の内側と外側のループの外側のreturn文で発生しています。観察可能な配列にプッシュされる前に、個々のオブザーバブルのそれぞれに内部ループ内の2つの変数を追加する必要があると思います。 – HendPro12