абстракция api звонков с подпиской в ​​угловых - PullRequest
0 голосов
/ 09 июня 2019

У меня есть 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();
      }
    );
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...