Rxjs 为什么';你不能完成可观察的吗?

Rxjs 为什么';你不能完成可观察的吗?,rxjs,Rxjs,在下面的代码中,我有条件地切换到另一个可观察对象。如果满足条件,则工作正常。如果不满足该条件并且我从switchMap返回空,则不执行subscribe块中的代码 如果我将returnempty更改为return of(x)它会工作 this.claimStoreService.setProducts(this.claim.products) .pipe(switchMap(x => { if (this.incomeEligibility) { return

在下面的代码中,我有条件地切换到另一个可观察对象。如果满足条件,则工作正常。如果不满足该条件并且我从switchMap返回空,则不执行subscribe块中的代码

如果我将
returnempty
更改为
return of(x)
它会工作

   this.claimStoreService.setProducts(this.claim.products)
  .pipe(switchMap(x => {
    if (this.incomeEligibility) {
      return this.claimStoreService.saveIncomeEligibility();
    } else {
      return EMPTY;
    }
  }))
  .subscribe(() => {
    this.isSaving = false;
    this.goIntoDisplayMode();
  }, () => {
    this.isSaving = false;
  });

尝试使用第三个回调:

this.claimStoreService.setProducts(this.claim.products)
.pipe(开关映射(x=>{
如果(这是不可原谅的){
返回此.claimStoreService.saveIncomeEligibility();
}否则{
返回空;
}
}))
.订阅(
()=>this.goIntoDisplayMode(),
console.err,
()=>this.isSaving=false,
);

尝试使用第三个回调:

this.claimStoreService.setProducts(this.claim.products)
.pipe(开关映射(x=>{
如果(这是不可原谅的){
返回此.claimStoreService.saveIncomeEligibility();
}否则{
返回空;
}
}))
.订阅(
()=>this.goIntoDisplayMode(),
console.err,
()=>this.isSaving=false,
);

如果将观察员传递到
subscribe
功能,可能会更清楚。您的代码将成为

this.claimStoreService.setProducts(this.claim.products)
  .pipe(switchMap(x => {
    if (this.incomeEligibility) {
      return this.claimStoreService.saveIncomeEligibility();
    } else {
      return EMPTY;
    }
  }))
  .subscribe({
    next: () => this.goIntoDisplayMode(),
    error: err => console.error(err), 
    complete: () => this.isSaving = false,
  });

如果将观察员传递到
subscribe
函数,可能会更清楚。您的代码将成为

this.claimStoreService.setProducts(this.claim.products)
  .pipe(switchMap(x => {
    if (this.incomeEligibility) {
      return this.claimStoreService.saveIncomeEligibility();
    } else {
      return EMPTY;
    }
  }))
  .subscribe({
    next: () => this.goIntoDisplayMode(),
    error: err => console.error(err), 
    complete: () => this.isSaving = false,
  });

好的,这是可行的,现在我看到EMPTY完成了,但是没有调用success回调。很好,很高兴有你helped@JamieIde:这是一篇内容丰富的帖子,谢谢分享。那么,您是否通过将isSaving移动到finalize来解决问题block@Dwaraka我最终使用了(x)的返回。好的,这是可行的,现在我看到EMPTY完成了,但是没有调用success回调。很好,很高兴有你helped@JamieIde:这是一篇内容丰富的帖子,谢谢分享。那么,您是否通过将isSaving移动到finalize来解决问题block@Dwaraka我最终使用了(x)的返回。