finalize() 方法似乎捕获未处理的异常并且不对它们执行任何操作。
在下面的代码中,控制台日志将运行,但在抛出错误后没有任何内容。但是您不会在开发工具或其他任何地方看到任何抛出错误的证据。这有什么原因吗?我看不到任何地方将其定义为预期功能。作为订阅的最后一个操作,我认为将此错误传递给 catchError() 没有意义。
this.obsService.getSubject().pipe(finalize(() => {
console.log(1);
throw new Error('Finalize issue');
this.performFinalActions();
})).subscribe();
这是否应该直接记录为 RxJS 的问题?
抛出新错误后会停止代码的执行,因此下面的代码是死代码(
performFinalActions
)。
我们需要从主题发出值,以便在控制台上显示错误。
最终确定发生在错误发生后,因此工作正常。
finalize 代码只有在主题完成后才会发生,否则不会被调用。
下面的工作示例
import { Subject } from 'rxjs';
import { finalize, tap } from 'rxjs/operators';
function performFinalActions() {
console.log('performing actions');
}
const subject$ = new Subject();
subject$
.pipe(
finalize(() => {
console.log(1);
throw new Error('Finalize issue');
performFinalActions();
})
)
.subscribe({
next: (data: any) => console.log('next', data),
error: (data: any) => console.log('error', data),
complete: () => {
console.log('complete');
},
});
subject$.next('asdf');
subject$.complete();