Как сопоставить наблюдаемое с другим - PullRequest
0 голосов
/ 04 мая 2018

Я посмотрел документы RxJs и выполнил поиск этого и не могу (удивительно) найти примеры того, что я пытаюсь сделать.

По сути, у меня есть две службы. Один сервис использует другой сервис и должен отобразить ответ потребляющего сервиса на другой тип.

Пример кода из приложения Angular:

@Injectable()
export class EmployeesService {

  BASE_URL = 'http://foo.bar.com/api/getEmployees';

  constructor(private http: HttpClient) {
  }

  get(): Observable<IEmployee[]> {
    return this.http.get<IEmployee[]>(this.BASE_URL);
  }
}


@Injectable()
export class MyEmployeeService {

  constructor(private svc: EmployeesService) {
  }

  get(): Observable<IMyEmployee[]> {
    return this.svc.get().map(
        (employees:IEmployee[]) => employees.forEach(employee => this.mapEmployeeToMyEmployee(employee))
    );
  }

  private mapEmployeeToMyEmployee(employee: IEmployee): IMyEmployee {
    return {
      ... simple property mapping to transform IEmployee to IMyEmployee
    };
  }
}

Однако в «MyEmployeeService» компилятор Typescript жалуется: «Возвращаемый тип выражения Observable (void) нельзя назначить типу Observable (IMyEmployee []).

Даже если бы я добавил операторы return в операцию карты, я все равно получаю те же жалобы. Что я тут не так делаю?

1 Ответ

0 голосов
/ 04 мая 2018

Лямбда в одной строке:

(employees:IEmployee[]) => employees.forEach(employee => this.mapEmployeeToMyEmployee(employee))

employees.forEach(...) возвращает undefined. Поскольку вы используете формат (...)=>... вместо (...)=>{...}, лямбда-выражение возвращает значение вашего единственного оператора (undefined).

Измените это на:

(employees:IEmployee[]) => employees.map(employee => this.mapEmployeeToMyEmployee(employee))

map похож на forEach, за исключением того, что он создает новый массив из возвращенного значения employee => this.mapEmployeeToMyEmployee(employee).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...