Почему я не могу получить доступ к свойству при использовании switchMap? - PullRequest
2 голосов
/ 16 октября 2019

У меня есть метод, прикрепленный к кнопке. Пользователь вводит свое имя в поле ввода, и при нажатии кнопки отображается информация об этом пользователе. Как я планирую это сделать, объясняется ниже.

Я пытаюсь передать значение из одной наблюдаемой в другую наблюдаемую. Значение, которое я пытаюсь получить из первой наблюдаемой, - это идентификатор, который затем используется во второй наблюдаемой.

Мой текущий способ сделать это - использовать оператор switchMap. Однако при передаче идентификатора из первой наблюдаемой во вторую я вижу «неопределенное» в своей консоли.

Я думаю, что либо я неправильно обращаюсь к идентификатору при вызове первой наблюдаемой. Или я не должен использовать switchMap ??

Это также странно, и я думал, что я был близок, потому что с помощью Object.keys (player) ['0'] я могу получить первый ключ объекта (Data). Но используя Object.keys (player) ['0']. Id;не определено: /

Это объект ответа, из которого я пытаюсь получить идентификатор:

Imgur

функция щелчка в моем компоненте:

click() {
  this.playerService.getPlayer(this.searchString).pipe(
      switchMap(player => {
        let ID = Object.keys(player)['0'];
        let anotherID = ID['0'].id;

        return this.playerService.getSeasonStats(anotherID);
      }))
    .subscribe(id => this.player = id)
}

Служба с методом getPlayer и методом getSeasonStats:

getPlayer(query: string):Observable<Player> {
  let getHeaders = new HttpHeaders({'Authorization':'Bearer API_Key', 'Accept': 'application/vnd.api+json'}); 
  return this.http.get<Player>(`https://api.com/shards/steam/players?filter[playerNames]=${query}`, {
    observe:'body',
    responseType: 'json',
    headers: getHeaders
  });
}


getSeasonStats(id: string):Observable<SeasonStats[]> {
  let getHeaders = new HttpHeaders({'Authorization':'Bearer API_Key', 'Accept': 'application/vnd.api+json'}); 
  return this.http.get<SeasonStats[]>(`https://api.com/shards/steam/players/${id}/seasons/division.bro.official.pc-2018-04`,  {
    observe:'body',
    responseType: 'json',
    headers: getHeaders
  });
}

1 Ответ

2 голосов
/ 16 октября 2019

Ваша проблема:

let ID = Object.keys(player)['0'];
let anotherID = ID['0'].id;

строка Object.keys(player)['0'] возвращает вас "data" в виде строки, теперь делает ['0'] вы получаете "d" ... так что ваш результат "d".id => undefined

Может быть, вам нужно сделать что-то вроде:

let playerData = player["data"][0];
let anotherID = playerData.id;
...