Browse Source

update: handle catch error inside `streamCreatorCallback`

pull/20804/head
sumeyyeKurtulus 2 years 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 { Injectable, Injector, OnDestroy } from '@angular/core';
import { import {
EMPTY,
BehaviorSubject, BehaviorSubject,
MonoTypeOperatorFunction, MonoTypeOperatorFunction,
Observable, Observable,
of,
ReplaySubject, ReplaySubject,
Subject, Subject,
} from 'rxjs'; } from 'rxjs';
@ -130,16 +130,19 @@ export class ListService<QueryParamsType = ABP.PageQueryParams | any> implements
return this.query$.pipe( return this.query$.pipe(
tap(() => this._isLoading$.next(true)), tap(() => this._isLoading$.next(true)),
tap(() => this._requestStatus.next('loading')), tap(() => this._requestStatus.next('loading')),
switchMap(query => streamCreatorCallback(query).pipe(catchError(() => of(null)))), switchMap(query =>
filter(Boolean), streamCreatorCallback(query).pipe(
tap(() => this._isLoading$.next(false)), catchError(() => {
tap(() => this._requestStatus.next('success')), this._requestStatus.next('error');
shareReplay<any>({ bufferSize: 1, refCount: true }), return EMPTY;
takeUntil(this.destroy$), }),
catchError(error => { filter(Boolean),
this._requestStatus.next('error'); tap(() => this._isLoading$.next(false)),
throw error; 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(); 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 => { const errCallback: QueryStreamCreatorCallback<ABP.PageQueryParams> = query => {
throw Error('A server error occurred'); throw Error('A server error occurred');
}; };
@ -177,7 +177,9 @@ describe('ListService', () => {
done(); done();
}); });
service.hookToQuery(errCallback).subscribe(); service.hookToQuery(errCallback).subscribe({
error: () => done(),
});
}); });
}); });
}); });

Loading…
Cancel
Save