RXJS 5を6にアップグレードして使用していたので、いくつかの問題に直面しています。
以前はcatchを使用できましたが、最終的にcatchがcatchErrorに置き換えられました(パイプ内で)今、最終的に使用する方法は?
また、いくつか質問があります:
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()を使用する方法は?
Observable.throw
の代わりにthrowError
を使用します。 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';
次に、pipe()
内でfinalizeが使用されます。
observable()
.pipe(
finalize(() => {
// Your code Here
})
)
.subscribe();
公式ドキュメントによれば 、コンパイルエラーを避けるために、次のようにコードを変更する必要があります(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.
で正常にコンパイルされます