为什么在使用 switchMap 时无法访问 属性?
Why can't I access property when using switchMap?
我有一个附加到按钮的方法。用户在输入中输入他们的姓名,单击按钮时,将显示来自该用户的信息。下面解释了我打算如何做到这一点。
我试图将一个值从一个 Observable 传递到另一个 Observable。我试图从第一个 Observable 获取的值是一个 ID,然后在第二个 Observable 中使用。
我目前执行此操作的方法是使用 switchMap 运算符。但是,当将 ID 从第一个 Observable 传递到第二个时,我在控制台中看到 'undefined'..
我在想,要么我在调用第一个 Observable 时没有正确访问 ID。要么我不应该使用 switchMap ??
这也很奇怪,我认为我已经很接近了,因为使用 Object.keys(player)['0'] 我可以获得第一个对象键(数据)。但是使用 Object.keys(player)['0'].id;未定义:/
这是我试图从中获取 ID 的响应对象:
我的组件中的点击功能:
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
});
}
您的问题是:
let ID = Object.keys(player)['0'];
let anotherID = ID['0'].id;
行 Object.keys(player)['0']
returns 你 "data"
作为字符串,现在做 ['0']
你得到 "d"... 所以你的结果是 "d".id => undefined
也许您需要执行以下操作:
let playerData = player["data"][0];
let anotherID = playerData.id;
我有一个附加到按钮的方法。用户在输入中输入他们的姓名,单击按钮时,将显示来自该用户的信息。下面解释了我打算如何做到这一点。
我试图将一个值从一个 Observable 传递到另一个 Observable。我试图从第一个 Observable 获取的值是一个 ID,然后在第二个 Observable 中使用。
我目前执行此操作的方法是使用 switchMap 运算符。但是,当将 ID 从第一个 Observable 传递到第二个时,我在控制台中看到 'undefined'..
我在想,要么我在调用第一个 Observable 时没有正确访问 ID。要么我不应该使用 switchMap ??
这也很奇怪,我认为我已经很接近了,因为使用 Object.keys(player)['0'] 我可以获得第一个对象键(数据)。但是使用 Object.keys(player)['0'].id;未定义:/
这是我试图从中获取 ID 的响应对象:
我的组件中的点击功能:
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
});
}
您的问题是:
let ID = Object.keys(player)['0'];
let anotherID = ID['0'].id;
行 Object.keys(player)['0']
returns 你 "data"
作为字符串,现在做 ['0']
你得到 "d"... 所以你的结果是 "d".id => undefined
也许您需要执行以下操作:
let playerData = player["data"][0];
let anotherID = playerData.id;