0

私の目的は、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 (国/州/都市... データを含む) を次のオペレーターに返す必要があります。

4

0 に答える 0