Моя цель - сохранить информацию на бэкэнд-сервере с помощью запросов POST.Мне нужно, чтобы эти запросы выполнялись один за другим по завершении предыдущего.Но мне нужно добавить немного логики между запросами.Эти запросы выполняются с использованием RxJs Observables .
Я дам вам некоторый контекст.Мое приложение имеет 5 моделей: Страна, Штат, Город, Адрес, Персона.
Лицо имеет адрес, принадлежащий городу, принадлежащий штату, который принадлежитСтрана.
Каждая модель содержит свой «родительский» идентификатор в качестве внешнего ключа (например, город имеет атрибут «state_id»).
Вся информация доступна через форму.Поэтому, когда я отправляю форму, я хочу сохранить эту информацию на своем внутреннем сервере.
Для этого мне нужно проверить (с помощью запроса GET), существует ли страна / штат / город / адрес в базе данных, если это необходимо, мне нужно привязать его идентификатор к «потомку»в противном случае мне нужно отправить его, а затем привязать его идентификатор к «ребенку».
Как мне этого добиться? Я провел некоторое исследование и попытался сделать это 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
Как мне это сделать?Обратите внимание, что моя главная проблема заключается в том, что иногда мне нужно будет делать некоторые POST-запросы между некоторыми GET-запросами, а иногда нет.Однако мне нужно будет возвращать некоторые Наблюдаемые (с данными Страна / Штат / Город ...) в каждой ситуации следующему оператору.