有没有一种方法可以同时运行onNext()和onError()函数,而无需在两个回调中都显式调用它?

时间:2019-02-13 17:31:31

标签: angular rxjs

我一直在编写这样的代码,以在两个回调中调用相同的清理函数:

lockDownStuff();

someHttpClientCall().subscribe((result: any) => {
    handleResult(result);
    unlockStuff();
}, (error: any) => {
    unlockStuff();
});

当我真的想调用关闭全局微调器,可靠的表单字段等功能的函数时,如下所示:

lockDownStuff();

someHttpClientCall().subscribe((result: any) => {
    handleResult(result);
    unlockStuffNoMatterWhat();
});

OR

someHttpClientCall()
  .subscribe((result: any) => {
    handleResult(result);
  })
  .finally((finally: any) => unlockStuff());

1 个答案:

答案 0 :(得分:0)

假设someHttpClientCall返回的可观察值是有限(这意味着它将在某个时候发出 complete 事件),则可以实现此目标通过使用finalize运算符,如下所示:

import {finalize} from 'rxjs/operators';

someHttpClientCall()
  .pipe(finalize(()=> unlockStuff()))
  .subscribe(...);

如果不是这种情况,则需要将无限转换有限流,例如通过有条件地排放通过使用takeUntil直到满足某些条件为止:

import {finalize, takeUntil} from 'rxjs/operators';

someHttpClientCall()
  .pipe(
     takeUntil(....),
     finalize(()=> unlockStuff())
  ).subscribe(...);