Возвращает наблюдаемый элемент из http.get в Angular 5

#angular #angular5 #observable

#angular #angular5 #наблюдаемый

Вопрос:

У меня есть служба, которая отправляет запросы в веб-API в памяти. Сервис включает в себя метод, который я хочу запросить (через строку запроса) в API для одного элемента.

Независимо от указания отдельного элемента в общем методе http.get, мне возвращается массив.

Это отличается от того, если я вызываю API для одного элемента, используя идентификатор, а не запрос, когда мне возвращается только один элемент.

 this.http.get<ITrack>(`api/tracks/1`)
  .subscribe(track => console.log(JSON.stringify(track)));
  

ВОЗВРАТ

 {"id":1,"artist":"Radiohead","name":"OK Computer","durationSeconds":61,"nominator":null,"playlistPosition":1}
  

Где как

 this.http.get<ITrack>(`api/tracks/?playlistPosition=1`)
  .subscribe(track => console.log(JSON.stringify(track)));
  

ВОЗВРАТ

 [{"id":1,"artist":"Radiohead","name":"OK Computer","durationSeconds":61,"nominator":null,"playlistPosition":1}]
  

Я могу получить второй вызов, чтобы вернуть только элемент со следующим:

 this.http.get<ITrack>(`api/tracks/?playlistPosition=1`)
.pipe(
  map(t => t[0])
)
.subscribe(track => console.log(JSON.stringify(track)));
  

Однако я не могу использовать такие методы, как single или first, поскольку компилятор ожидает возвращаемый тип iTrack.

Каков правильный способ вернуть один элемент здесь?

Комментарии:

1. Да, я слишком много предполагал от http.get() и ожидал, что он либо преобразуется в тип, указанный в http.get(<T>), либо выдает ошибку, когда он ожидает iTrack, но получает iTrack[]. Ваш комментарий в значительной степени отвечает на мой вопрос!

Ответ №1:

Поэтому, если конечная точка всегда возвращает список, вызовите get метод, введенный с помощью ITrack -array.

Просто замените .get<ITrack>(...) на .get<ITrack[]>(...) .

Комментарии:

1. Спасибо — мне нужно купить себе резиновую уточку!