我继续编写在两个回调中调用相同清理功能的代码:
lockDownStuff();
someHttpClientCall().subscribe((result: any) => {
handleResult(result);
unlockStuff();
}, (error: any) => {
unlockStuff();
});
当我真的想调用我的功能以关闭我的全局旋转器,可重新可重新可重新易旋转的表单字段等。以这种方式:
lockDownStuff();
someHttpClientCall().subscribe((result: any) => {
handleResult(result);
unlockStuffNoMatterWhat();
});
或
someHttpClientCall()
.subscribe((result: any) => {
handleResult(result);
})
.finally((finally: any) => unlockStuff());
在假设someHttpClientCall
返回的可观察到的是有限的(这意味着它将在某个时候发出a 完整事件),您可以使用finalize
操作员如下:
import {finalize} from 'rxjs/operators';
someHttpClientCall()
.pipe(finalize(()=> unlockStuff()))
.subscribe(...);
如果不是这种情况,您需要 thronst infinite 流到有限中,例如,通过有条件地进行排放它通过使用takeUntil
:
import {finalize, takeUntil} from 'rxjs/operators';
someHttpClientCall()
.pipe(
takeUntil(....),
finalize(()=> unlockStuff())
).subscribe(...);