【发布时间】:2019-03-22 09:42:12
【问题描述】:
我正在打电话给 PokeApi 以获取口袋妖怪列表。然后我需要进行第二次调用以返回每个口袋妖怪的精灵图像。
我能够使用 rxjs Observables 正确返回 Pokemon 列表。当这返回口袋妖怪名称时,我再次调用口袋妖怪详细信息以返回精灵。然而,第二次调用没有及时完成以返回 Pokemon Sprites。
public getListOfPokemon(page: number): Observable<Pokemon[]> {
let apiUrl = `${this.apiBaseUrl}/pokemon/?limit=1`;
if (page > 0) {
let offset = page * 42;
apiUrl = `${this.apiBaseUrl}/pokemon/?offset=${offset}&limit=42`;
}
return this._httpClient.get(apiUrl).pipe(
map((resp: any) => {
if (resp.results.length == 0) {
this.lastPageOfResults = resp.next == null;
this.router.navigate(['/404']);
}
this.lastPageOfResults = resp.next == null;
let pkmnList = _.map(resp.results, (pkmn) => {
let frontSprite: string;
let shinySprite: string;
new Promise(resolve => {
resolve(this.getPokemonSprites(pkmn.name).subscribe(sprite => {
return sprite;
}))
}).then((value) => {
console.log(value);
});
let singlePkmn = new Pokemon(pkmn.name, frontSprite, shinySprite);
return singlePkmn;
});
return pkmnList;
})
)
}
当我们返回新的口袋妖怪时,没有设置frontSprite 和 shinySprite。
编辑 下面是 getPokemonSprites 方法,用于进一步说明
private getPokemonSprites(name: string): Observable<any> {
let apiUrl = `${this.apiBaseUrl}/pokemon/${name}`;
return this._httpClient.get(apiUrl).pipe(
map((pkmnDetail: any) => {
console.log('hi');
return pkmnDetail.sprites;
})
)
}
【问题讨论】:
-
我不确定您要做什么。如果您查看英雄之旅,他们会非常广泛地涵盖这一点。可能是这个问题可以澄清的情况,但你不应该对 rxjs 做任何疯狂的事情来让它正常工作。
标签: angular promise rxjs observable