Итак, я хочу отправить 2 почтовых запроса вместе, но я хочу, чтобы в случае сбоя любого из 2 запросов (например, непредвиденная ошибка) ни один из запросов фактически не был выполнен.Предполагается, что запрос на 2 сообщения является отдельной функцией на бэкэнде (то есть: 2 отдельных конечных точки).
Я искал и нашел некоторые вопросы относительно похожими, но все решения не отменили бы оба запроса, если одинне удалось, и многие из них используют то, что кажется устаревшими функциями (mergeMap
, forJoin
, ...)
Попытка
Я пробовал несколько вариантов:
Карта запроса в другом запросе:
this.service.postFunction1(body1).pipe(
map(()=>this.service.postFunction2(body2).subscribe(
res=>{
/** Stuff here... **/
},
err=>{
/** Stuff here... **/ //Should I stop here the whole thing here?
})
)
).subscribe(
res=>{
/** Stuff here... **/
},
err=>{
/** Stuff here... **/
})
)
Вложенная подписка:
(я знаю, что это не очень хорошая практика)
this.service.postFunction1(body1).subscribe(
res=>{
this.service.postFunction2(body2).subscribe(
res=>{},
err=>{}
)
},
err=>{
/** Stuff here... **/ //Should I stop here the whole thing here?
})
)
Прямо сейчас я называю их совершенно раздельно, потому что у меня нет четкого представления о том, как их собрать вместе, помня, что «если кто-то терпит неудачу, они оба терпят неудачу».
Может быть, я просто имеюмодифицировать бэкэнд и обрабатывать 2 почтовых запроса как одну функцию (1 конечная точка), но мне было любопытно, есть ли способ сделать это с отдельными запросами.