Skrocenie dwoch metod z forkJoin - Angular

1

Cześć, obecnie mam dwie metody jedna pobierajaca dane druga filtrująca, da się to jakoś fajnie skrócić?

searchEmployees(value: string = ''): Observable<IEmployeeDetails[]> {
  return forkJoin([
    this.http.get<any>(`${this.baseUrl}?name_like=${value}`),
    this.http.get<any>('http://localhost:3000/companies')
  ]).pipe(map(([employee, companies]) => employee.map(item =>
    {
      return {
        data: item,
        company: companies.find(x=> x.id == item.companyId)
      }
    })
  ))
}
getEmployeesWithDetails(): Observable<IEmployeeDetails[]> {
  return forkJoin([
    this.getEmployees(),
    this.companiesService.getCompanies()
  ]).pipe(map(([employee, companies]) => employee.map(item =>
    {
      return {
        data: item,
        company: companies.find(x=> x.id == item.companyId)
      }
    })
  ))
}
0
  1. Zamiast forkJoina możesz skorzystać z switchMap i po prostu w requeście wrzucić dane do filtrowania.
  2. Funkcję mapującą możesz spokojnie zrobić jako "globalną" arrow function, wtedy skrócisz ten kod o jakieś 7 lini +-, a i będzie dużo bardziej czytelniejszy.
  3. Możesz zrobic dodatkową metodę, która będzie przyjmowała 2 Observable, Observable<Employee[]> i Observable<Company[]>.
1

Jeśli chodzi o czytelność to jest wporzadku. Nie próbuj na sile zmniejszać linii kodu. Ja bym pomyślał nad jakaś mapa firm, bo takie przeszukiwanie listy aż boli, a wydajność jest najgorsza z mozliwych. Po drugie w większości przypadków lepiej trzymać identyfikatory (normalizacja) i dopiero na samym końcu składać obiekty z wykorzystaniem mapy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1