Nesse código a baixo tem um exemplo para poder entender como parar um loop
merge(
controlForm.get('startDate').valueChanges,
controlForm.get('endDate').valueChanges
).subscribe(() => {
// console.log(data)
const start = moment(controlForm.get('startDate').value);
const end = moment(controlForm.get('endDate').value);
if (start.isValid() && end.isValid()) {
controlForm
.get('durationInDays')
.setValue(end.diff(start, 'days') + 1, {
emitEvent: false,
});
}
});
controlForm
.get('durationInDays')
.valueChanges.pipe(distinctUntilChanged())
.subscribe((days: number) => {
const end = moment(controlForm.get('endDate').value);
if (end.isValid()) {
controlForm
.get('startDate')
.setValue(end.subtract(days, 'days').toDate(), {
emitEvent: false,
});
}
});