The RxJS combineLatest operator combines multiple observables and emits when any source emits after every source has produced at least one value. This initial-emission gate becomes easy to miss when synchronous form events meet asynchronous HTTP results. section 6.1.1
Form validation and duplicate detection
A form combines the synchronous allowDuplicates valueChanges stream with an asynchronous hasDuplicates$ stream from an HTTP duplicate check. The canSaveAsDuplicate$ stream controls a Save as duplicate button, but the button remains hidden until both sources emit. Clicking the checkbox alone is insufficient if the name field has not triggered the HTTP check. section 6.1.1
Account for these practical caveats:
- Seed combined streams with default values when appropriate, though startsWith-based mitigation adds complexity. section 6.1.1
- Treat mixed synchronous and asynchronous sources as potential causes of delayed UI updates, race conditions, and difficult debugging. section 6.1.1
