#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. Спасибо — мне нужно купить себе резиновую уточку!