subscribe 方法中的箭头函数被立即调用

The arrow function inside the subscribe method is being called inmediatly

我有一个 angular 对话框,它使用 ngrx 调用 API。

registerEvents只是对一个数组添加两个订阅,只在构造函数中调用

但由于某种原因,两个订阅的粗箭头内的代码在对话框打开后立即被调用,我希望只有一条“新数据”消息,而不是两条。

几乎就像 registerEvents 正在执行箭头函数或自动调度操作

constructor(@Inject(MAT_DIALOG_DATA) public data: any,
    private dialogRef: MatDialogRef<ScheduledAppointmentsDialogComponent>,
    private orderStore$: Store<OrdersState.State>)
{
    this.registerEvents();
}

registerEvents() {
    this.subscriptions.push(this.apptsForOrder$.subscribe((apptsForOrder: any[]) => {
      console.log("new data");
      this.apptsForOrder = apptsForOrder;
    }));

    this.subscriptions.push(this.updateAttachedAppointment$.subscribe((attachAppointment: boolean) => {
      console.log({ attachAppointment: attachAppointment });
      this.toogleLinkStatus();
    }, (err) => { console.log(err) }));

  }

ngOnInit(): void {
    // other code 
    this.loadApptsForOrder();
    // other code 
}

loadApptsForOrder() {
    this.orderStore$.dispatch(OrdersActions.loadApptsForOrder({ orderId: this.orderId }));
}

loadApptsForOrder 仅在 onInit 内部调用,但有两条“新数据”消息

我试过从 mergeMap 更改为 switchMap 但没有任何效果

attachAppointment$ = createEffect(() => this.actions$.pipe(
    ofType(actions.attachAppointment),
    mergeMap(args => this.orderService.attachAppointment(args.attachAppointmentRequest)
        .pipe(
            map(response => actions.attachAppointmentComplete({ attachAppointmentResponse: response.statusCode })),
            catchError(() => of(actions.attachAppointmentFailure({ error: 'fail' })))
        )
    )
));

这可能是我实现 service/store 的方式的错误吗?以我订阅的方式或其他方式?

apptsForOrder$orderStore$observables<T>

  private apptsForOrder$ = this.orderStore$.select(OrdersSelectors.getApptsForOrder);
  private updateAttachedAppointment$ = this.orderStore$.select(OrdersSelectors.updateAttachedAppointment);

apptsForOrder$ 是 BehaviourSubject 吗?在 Behaviour Subjects 中,回调在订阅时以及当 subject 有新值时执行。在 Subjects 中,只有当 subject 有新值时才会执行回调。

看到这个:

NgRx 选择器将在订阅完成后直接开始发送值。第一个值发出是存储当前值。要在您的组件上禁用此行为,您可以在订阅前使用 RxJs 运算符 skip(1)