0
タイルの配列を取得しています。その配列の一部には配列があります。設定を持つものは、オプションの配列(optionオブジェクトを含む)またはrestURLを指すoptionUrlのいずれかを持つ可能性があります。 これらのオプションを各タイルに追加するには、設定とoptionUrlがありますか? flatMapとforkJoinを試しましたが、optionsUrlのリクエストが完了しないようです。また、私はmergeMapを試してみました。ループでネストされたobservable内で条件付きでforkJoin observablesを呼び出す
どのようにすれば効果がありますか?ここで
はoptionUrlと例のタイル構造です:
{
id: "superTile",
name: "Super Tile",
configurations: [
{
param: "shopId",
optionsUrl: "rest/shops"
},
{
param: "sortOrder",
option: [
{
id: "Newest",
text: "PROD_YEAR-DESC"
},
{
id: "Rank",
text: "RANKING-DESC"
},
]
}
]
}
ここに私のコンポーネントです:
ngOnInit(){
this._myService.getAllTiles()
.subscribe((tiles: Tiles[]) => {
this.tiles = tiles
})
}
マイサービス:
getAllTiles(): Observable<any>{
return this._http
.get(this._tilesUrl)
.map((result) => result.json().data)
.flatMap((tiles) => {
tiles.map((tile) => {
if (tile.configurations) {
return Observable.forkJoin(
tile.configurations.map((config) => {
if(config.optionsUrl) {
console.log(config);
return this._http.get(config.optionsUrl)
.map((result) => {
let optionArray = [];
config['option'] = optionArray;
let jsonObj = result.json();
let newOptions = jsonObj.data;
console.log(newOptions);
config['option'].push(newOptions);
return config;
})
} else {
return Observable.of(config);
}
})
)
} else {
return Observable.of(tiles)
}
});
return Observable.of(tiles);
})
}
ありがとう、これは何とか助けてくれました。あなたが言ったようにフォークジョイントが働いていたのですが、tile.configurationsの2番目のマップに問題が発生しました。条件に合わないときは、ダブルタイルまたはダブルの設定項目を返していました。一時的にオプションのリクエストをタイルコンポーネントに移動しました。これはcharmのように機能しますが、私はまだforkJoinソリューションについて興味があります。 – Tina333
@ Tina333 'ダブルタイルやダブル設定アイテム 'とはどういう意味ですか?コードがoptionsUrlまたは設定だけに基づいてHTTPリクエストを返すようです。 – LLai
0:{tileObj} 1:{configObj}、{configObj} 2:{optionsObj}、{ configObj}、 3:{tileObj} 4:{configObj}、{configObj} 条件を満たすかどうかは、tileObjまたはconfigオブジェクトのいずれかを返します。私がreturn Observable.of(config)from else文を削除した場合、ストリームが予期されていたところでundefinedを指定していると文句を言います。 – Tina333