I'm writing a function using concatMap to make HTTP calls sequentially, e.g. add a person, use some info returned to add a contact then add some accounts.
The function receives a list (portfolios in my case) and for each portfolio I need to create calls to addAccount and addInvestorAccount.
So for example two portfolios would require two sets of calls to these endpoints (addInvestorAccount is dependent on the result of addAccount)
I'm unsure how to create these dynamic sets of HTTP calls and attach them to the current stream. I've looked at forkJoin but this appears to be for parallel calls that are independent.
Hope this makes some sense, here's some demo code:
AddPerson(person: Person, portfolios: Portfolio[]) {
const addPerson = new AddPersonRequest();
// additional request props
return this.hostSvc.put(addPersonRequest)
.concatMap((response: Person) => {
const emailContactRequest = new CreateContactRequest();
emailContactRequest.PersonId = response.Id;
// additional request props
return this.hostSvc.put(emailContactRequest)
})
.concatMap((response: AccountName) => {
const addAccountRequest = new AddAccountRequest();
addAccountRequest.Data = new Account();
addAccountRequest.Data.AccountId = response.Id
addAccountRequest.Data.PortfolioId = portfolios[0].Id
// additional request props
return this.hostSvc.put(addAccountRequest);
})
.concatMap((response: Account) => {
const addInvestorAccountRequest = new AddInvestorAccountRequest();
addInvestorAccountRequest.Data = new InvestorAccount();
addInvestorAccountRequest.Data.AccountType = response.AccountType
// additional request props
return this.hostSvc.put(addInvestorAccountRequest);
}, (error) => console.log(error))
}
As you can see above I'm using Portfolio[0], obviously I need to iterate the portfolios for addAccountRequest and addInvestorAccountRequest
Thanks!