我一直在编写这样的代码,以在两个回调中调用相同的清理函数:
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());
答案 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(...);