У меня есть 2-5 сервисов, которые выполняют один и тот же код, но у каждого из них свои вызовы API, и мне нужны данные на всех страницах, чтобы первый подписчик получал данные, а второй - простоподписаться (простое решение с флагом)
например, один из вызовов получает конфигурацию с сервера, второй получает список настроек, список пользователей ... и т. д.
IЯ хотел бы абстрагировать это хорошим способом, как загрузчик ресурсов или фабрика ресурсов без расширения родительского класса или абстрактного класса
, один из моих сервисных кодов выглядит следующим образом:
export class data1Service {
private static readonly apiEndpoint: string ='get_data1';
get$: Observable<Setting>;
setting: data1 = new data1();
private flag = false;
private data1Subject = new AsyncSubject<data1>();
private logger: Logger;
constructor(private readonly http: HttpClient, logger: Logger) {
this.data1get$ = this.data1Subject.asObservable();
}
loaddata1() {
if (this.flag) {
return;
}
this.flag = true;
return this.http.get<data1>(data1Service.apiEndpoint).subscribe(
async data => {
const data1Obj = plainToClass(data1, data as Object);
const validationResult = await validate(data1Obj);
if (validationResult.length > 0) {
this.data1 = new data1();
} else {
this.data1 = data1Obj;
this.logger.debug('validation succeed');
}
this.data1Subject.next(this.data1);
this.data1Subject.complete();
},
(err: any) => {
this.logger.debug('could not fetch data1');
this.data1Subject.next(this.data1);
this.data1Subject.complete();
}
);
}