Browse Source

update: handle catch error inside `streamCreatorCallback`

pull/20804/head
sumeyyeKurtulus 1 year ago
parent
commit
c8caa03519
  1. 25
      npm/ng-packs/packages/core/src/lib/services/list.service.ts
  2. 6
      npm/ng-packs/packages/core/src/lib/tests/list.service.spec.ts

25
npm/ng-packs/packages/core/src/lib/services/list.service.ts

@ -1,9 +1,9 @@
import { Injectable, Injector, OnDestroy } from '@angular/core';
import {
EMPTY,
BehaviorSubject,
MonoTypeOperatorFunction,
Observable,
of,
ReplaySubject,
Subject,
} from 'rxjs';
@ -130,16 +130,19 @@ export class ListService<QueryParamsType = ABP.PageQueryParams | any> implements
return this.query$.pipe(
tap(() => this._isLoading$.next(true)),
tap(() => this._requestStatus.next('loading')),
switchMap(query => streamCreatorCallback(query).pipe(catchError(() => of(null)))),
filter(Boolean),
tap(() => this._isLoading$.next(false)),
tap(() => this._requestStatus.next('success')),
shareReplay<any>({ bufferSize: 1, refCount: true }),
takeUntil(this.destroy$),
catchError(error => {
this._requestStatus.next('error');
throw error;
}),
switchMap(query =>
streamCreatorCallback(query).pipe(
catchError(() => {
this._requestStatus.next('error');
return EMPTY;
}),
filter(Boolean),
tap(() => this._isLoading$.next(false)),
tap(() => this._requestStatus.next('success')),
shareReplay<any>({ bufferSize: 1, refCount: true }),
takeUntil(this.destroy$),
),
),
);
}

6
npm/ng-packs/packages/core/src/lib/tests/list.service.spec.ts

@ -165,7 +165,7 @@ describe('ListService', () => {
service.hookToQuery(callback).subscribe();
});
it('should emit error requestStatus as side effect', done => {
it('should emit error requestStatus as side effect and stop processing', done => {
const errCallback: QueryStreamCreatorCallback<ABP.PageQueryParams> = query => {
throw Error('A server error occurred');
};
@ -177,7 +177,9 @@ describe('ListService', () => {
done();
});
service.hookToQuery(errCallback).subscribe();
service.hookToQuery(errCallback).subscribe({
error: () => done(),
});
});
});
});

Loading…
Cancel
Save