我的目标是通过POST请求将信息保存在后端服务器中。我需要在上一个请求完成时一一执行这些请求。但是我需要在请求之间添加一些逻辑。这些请求是使用 RxJs Observables 发出的。
我给你一些背景。我的应用程序有5种型号:国家,州,城市,地址,人。
一个人的地址属于城市,属于国家,属于国家。
每个模型均包含其“父” ID作为外键(例如,城市具有属性“ state_id”)。
所有信息均可通过表格获得。因此,当我提交表单时,我想将此信息保存在后端服务器中。
为此,我需要(通过GET请求)检查数据库中是否已经存在国家/州/城市/地址,如果需要,则需要将其ID绑定到“子级”,否则,需要发布它,然后将其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请求,而有时则不需要。但是,在每种情况下,我都需要将一些可观察到的(带有“国家/地区/州/城市...”数据)返回给下一个操作员。