You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RxJS是否有combineSoonest等效操作符?支持任一Observable触发即发射值

解决方案:实现表单状态的即时合并判断

你可以通过给每个表单的statusChanges Observable添加startWith操作符,配合combineLatest来实现需求。startWith会让Observable在初始化阶段就发射指定的初始值,无需等待表单被触碰后才触发合并逻辑。

修改后的代码示例

import { combineLatest } from 'rxjs';
import { startWith, map } from 'rxjs/operators';

combineLatest([
  this.nameForm.statusChanges.pipe(startWith(this.nameForm.status)),
  this.addressForm.statusChanges.pipe(startWith(this.addressForm.status)),
]).pipe(
  map(([nameStatus, addressStatus]) => {
    const nameIsValid = nameStatus === 'VALID';
    const addressIsValid = addressStatus === 'VALID';
    return nameIsValid && addressIsValid;
  }),
).subscribe((isValid) => {
  this._showSaveButton(isValid);
});

逻辑说明

  • startWith(this.nameForm.status)会立即发射表单的当前初始状态(比如默认的VALID或INVALID),规避了原combineLatest需要等待两个表单都触发状态变化的问题。
  • 初始化阶段combineLatest就能拿到两个表单的状态,之后只要任一表单状态变更,就会重新计算是否显示保存按钮。
  • 原代码中status === undefined的判断可以移除,因为startWith已确保Observable一定会发射初始状态,不会出现undefined的情况。

内容的提问来源于stack exchange,提问作者cadesalaberry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 16:12:48