为什么在使用switchMap时无法访问属性?

时间:2019-10-16 18:11:37

标签: javascript angular angular7 switchmap

我在按钮上附加了一种方法。用户在输入中输入其名称,然后单击按钮时,将显示该用户的信息。

我正在尝试将值从一个Observable传递到另一个Observable。我试图从第一个Observable获取的值是一个ID,然后在第二个Observable中使用该ID。

我目前执行此操作的方法是使用switchMap运算符。但是,当将ID从第一个Observable传递到第二个Observable时,我在控制台中看到“ undefined”。

我在想,或者我在调用第一个Observable时无法正确访问ID。或者我不应该使用switchMap?

这也很奇怪,我以为我已经接近了,因为使用Object.keys(player)['0']我可以获得第一个对象键(数据)。但是使用Object.keys(player)['0']。id;未定义:/

这是我试图从以下位置获取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 个答案:

答案 0 :(得分:2)

您的问题是:

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;