私の目的は、POST リクエストを介してバックエンド サーバーに情報を保存することです。前のリクエストが終了したら、これらのリクエストを 1 つずつ実行する必要があります。ただし、リクエスト間にロジックを追加する必要があります。これらのリクエストは、RxJs Observablesを使用して行われます。
文脈を説明します。私のアプリには、Country、State、City、Address、Person の 5 つのモデルがあります。
Person には、City に属する Address、State に属する Address、Country に属する Address があります。
各モデルには、その「親」ID が外部キーとして含まれています (たとえば、City には属性「state_id」があります)。
すべての情報はフォームから入手できます。そのため、フォームを送信するときに、この情報をバックエンド サーバーに保存したいと考えています。
これを行うには、国/州/都市/住所がデータベースに既に存在するかどうか (GET 要求を介して) を確認する必要があります。存在する場合は、その ID を「子」にバインドする必要があります。そうでない場合は、POST する必要があります。その ID を「子」にバインドします。
どうすればこれを達成できますか? 私はいくつかの調査を行い、この配管concatMap()
演算子を実行しようとしました。concat
しかし、私の問題は次のとおりです。これらのリクエストをどのように行うことができますか?
これは私がこれまでに持っているものです:
this.countrySvc.getCountryByName(countryAux.name).pipe(
concatMap(country1 => {
if (country1[0] != null){
/*Country exists in DB*/
countryAux.id = country1[0].id;
return of(country1[0]);
}
else{
/*Country is not in DB, i need to save it before continuing*/
this.countrySvc.postCountry(countryAux).pipe(
concatMap(country2 => {
countryAux.id = country2.id;
return of(country2);
})
)
.subscribe();
return of(countryAux);
}
}),
concatMap(country3 => {
console.log("Checking what do I get here: " + country3.name + " " + country3.id);
return country3;
})
)
.subscribe();
これを正しく行う方法がわかりません。私が探しているリクエストのシーケンスは次のとおりです。
GET country // Search by name
if it exists
state.country_id = ID /*ID comes in response*/
else
POST country /*ID comes in response*/
state.country_id = ID
/*Once this (or these) previous request(s) complete*/
/*---------So far i have implemented up to here---------*/
GET province
if it exists
city.state_id = ID
else
POST state
city.state_id = ID
/*Once this (or these) previous request(s) complete*/
GET city
if it exists
address.city_id = ID
else
POST city
address.city_id = ID
/*Once this (or these) previous request(s) complete*/
GET address
if it exists
person.address_id = ID
else
POST address
person.address_id = ID
/*Once this (or these) previous request(s) complete*/
POST person
どうすればそれを行うことができますか?私の主な問題は、いくつかの GET リクエストの間にいくつかの POST リクエストを実行する必要がある場合と、そうでない場合があることです。ただし、状況ごとに Observable (国/州/都市... データを含む) を次のオペレーターに返す必要があります。