Angular : 如何使用 RXJS 6 调用 finally()
Angular : how to call finally() with RXJS 6
我之前使用的是 RXJS 5,现在升级到 6,我遇到了一些问题。
以前我可以使用 catch 和 finally,但是根据更新,catch 被替换为 catchError(在管道中)现在如何使用 finally?
我还有一些问题:
我需要更改 throw->throwError(在下面的代码 Observable.throw(err);)
import { Observable, Subject, EMPTY, throwError } from "rxjs";
import { catchError } from 'rxjs/operators';
return next.handle(clonedreq).pipe(
catchError((err: HttpErrorResponse) => {
if ((err.status == 400) || (err.status == 401)) {
this.interceptorRedirectService.getInterceptedSource().next(err.status);
return Observable.empty();
} else {
return Observable.throw(err);
}
})
//, finally(() => {
// this.globalEventsManager.showLoader.emit(false);
//});
);
还有现在如何使用 publish().refCount() ?
使用throwError
代替Observable.throw
,参见https://github.com/ReactiveX/rxjs/blob/master/docs_app/content/guide/v6/migration.md#observable-classes
finally
已重命名为 finalize
,您将在 pipe()
和其他运算符中使用它。
同publish()
和refCount()
。两者都是您将在 pipe()
.
中使用的运算符
需要从 rxjs/operators
导入 finalize
。
import { finalize } from 'rxjs/operators';
然后finalize里面用到了pipe()
,
observable()
.pipe(
finalize(() => {
// Your code Here
})
)
.subscribe();
According to official document,您应该像这样更改代码以避免编译错误:(您必须在 catchError
方法中抛出异常。finalize
回调方法没有参数。)
import { catchError, finalize } from 'rxjs/operators';
return next.handle(clonedreq).pipe(
catchError(error => {
console.log('error occured:', error);
throw error;
}),
finalize(() => {
console.log('finalize')
})
);
在Angular CLI: 7.1.4.
编译成功
我之前使用的是 RXJS 5,现在升级到 6,我遇到了一些问题。
以前我可以使用 catch 和 finally,但是根据更新,catch 被替换为 catchError(在管道中)现在如何使用 finally?
我还有一些问题:
我需要更改 throw->throwError(在下面的代码 Observable.throw(err);)
import { Observable, Subject, EMPTY, throwError } from "rxjs";
import { catchError } from 'rxjs/operators';
return next.handle(clonedreq).pipe(
catchError((err: HttpErrorResponse) => {
if ((err.status == 400) || (err.status == 401)) {
this.interceptorRedirectService.getInterceptedSource().next(err.status);
return Observable.empty();
} else {
return Observable.throw(err);
}
})
//, finally(() => {
// this.globalEventsManager.showLoader.emit(false);
//});
);
还有现在如何使用 publish().refCount() ?
使用
throwError
代替Observable.throw
,参见https://github.com/ReactiveX/rxjs/blob/master/docs_app/content/guide/v6/migration.md#observable-classesfinally
已重命名为finalize
,您将在pipe()
和其他运算符中使用它。同
publish()
和refCount()
。两者都是您将在pipe()
. 中使用的运算符
需要从 rxjs/operators
导入 finalize
。
import { finalize } from 'rxjs/operators';
然后finalize里面用到了pipe()
,
observable()
.pipe(
finalize(() => {
// Your code Here
})
)
.subscribe();
According to official document,您应该像这样更改代码以避免编译错误:(您必须在 catchError
方法中抛出异常。finalize
回调方法没有参数。)
import { catchError, finalize } from 'rxjs/operators';
return next.handle(clonedreq).pipe(
catchError(error => {
console.log('error occured:', error);
throw error;
}),
finalize(() => {
console.log('finalize')
})
);
在Angular CLI: 7.1.4.