Вы можете использовать:
<form (ngSubmit)="submit$.next(form.value)" ...
В вашем компоненте:
submit$= new Subject();
ngOnInit {
submit$.pipe(
exhaustMap(value =>
this.post(url, {'rationale': value.rationale}))
.pipe(concatMap( response => {
value.detail = response.id;
return this.patch(url, value.extid, value);
}))).subscribe(); // rember to handle unsubcribe
}
Причина, по которой я обычно использую выхлопную карту, обычно post и path - это мутирующие вызовы, так что оператор гарантирует, что первая отправка будет обработана игнорируйте все остальное при обработке AKA, избегайте двойной отправки
Еще лучше использовать эффекты ngrx, которые, если вы еще этого не знаете, я рекомендую изучить
submit$ = createEffect(
() => this.actions$.pipe(
ofType(FeatureActions.submit),
exhaustMap( ({value}) => // if action has value property
this.post(url, { rationale : value.rationale}))
.pipe(concatMap( response => {
value.detail = response.id;
return this.patch(url, value.extid, value);
})),
map(result => FeatureActions.submitSuccess(result))
)
);