Javascript 使用Rxjs进行优化

Javascript 使用Rxjs进行优化,javascript,angular,typescript,rxjs,Javascript,Angular,Typescript,Rxjs,我有一段代码,比如 if (this.organization) { this.orgService.updateOrganization(this.createOrganizationForm.value).subscribe(() => { this.alertify.success(`Organization ${this.organization.name} was updated`); this.dialogRef.close(true); }); } e

我有一段代码,比如

if (this.organization) {
  this.orgService.updateOrganization(this.createOrganizationForm.value).subscribe(() => {
    this.alertify.success(`Organization ${this.organization.name} was updated`);
    this.dialogRef.close(true);
  });
} else {
  this.isLoading$.next(true);
  this.orgService.createOrganization(this.createOrganizationForm.value).subscribe(
    () => {
      this.alertify.success('New organizations was successfully added');
      this.dialogRef.close(true);
      this.isLoading$.next(false);
    },
    (error) => {
      this.alertify.error('\n' + error);
      this.isLoading$.next(false);
    },
  );
}

我的问题是什么是最好的运营商或使用订阅一次的方式。如果存在,我可以在Rxjs中使用哪个操作符来优化它并订阅一次,或者如果有其他方法。

看到订阅回调中的内容可能会被视为副作用,我想说,您可以使用
iif
函数以及
tap
catchError
操作符来确定可观察到的副作用

试试下面的方法

从'rxjs'导入{of,iif};
从“rxjs/operators”导入{tap,switchMap};
const updateOrg$=this.orgService.updateOrganization(this.createOrganizationForm.value).pipe(
点击(()=>{
this.alertify.success(`Organization${this.Organization.name}已更新`);
此.dialogRef.close(true);
})
);
const createOrg$=of(null).pipe(
点击(()=>this.isLoading$.next(true)),
switchMap(()=>this.orgService.createOrganization(this.createOrganizationForm.value)),
水龙头(
() => {
this.alertify.success('已成功添加新组织');
此.dialogRef.close(true);
此.isLoading$.next(false);
},
(错误)=>{
this.alertify.error('\n'+error);
此.isLoading$.next(false);
}
)
);
iif(
()=>这个组织,
updateOrg$,
createOrg$
).subscribe();