मैं एक साधारण परीक्षण परियोजना पर काम कर रहा हूं, लेकिन मुझे यह वास्तव में अजीब समस्या आई। मैं किसी सरणी में मानों तक नहीं पहुंच सकता।

pokemonStats$: Observable<PokemonStats[]>;

getPokemonStats(id: number): any {
this.pokemonStats$
.pipe(take(1))
.subscribe(stats => {
  console.log(stats instanceof Array);
  console.log('length', stats.length);
  console.log('du', stats);
  console.log('test', stats[1]);
});
}

और यह आउटपुट है:

Output in browser console

यहाँ क्या चल रहा है? एक सहयोगी ने सुझाव दिया कि यह एक सरणी जैसी संरचना हो सकती है, इसलिए मैंने 'उदाहरण' लॉग जोड़ा। कोई भी मदद बहुत ही सराहनीय होगी।

संपादित करें: यहां कोड है, जहां यह भर जाता है

this.pokemonStats$ = this.getAllPokemonStats(ids);

getAllPokemonStats(ids: number[]): Observable<PokemonStats[]> {
const pokemonArray: PokemonStats[] = [];
ids.forEach(id => {
  const url = 'https://pokeapi.co/api/v2/pokemon/' + id;
  this.http.get(url)
    .pipe(take(1))
    .subscribe((data: PokemonStatsAPI) => {
      pokemonArray.push({
          id: data.id,
          name: data.name,
          speed: data.stats[0].base_stat,
          hp: data.stats[5].base_stat,
          attack: data.stats[4].base_stat,
          defense: data.stats[3].base_stat
        });
    });
});
return of(pokemonArray);

}

0
Tomáš Lokša 30 जून 2020, 10:58

1 उत्तर

सबसे बढ़िया उत्तर

आप pokemonArray के साथ देखने योग्य नया लौटा रहे हैं, जो खाली है और async भर जाएगा, इसलिए जब आप getAllPokemonStats की सदस्यता लेते हैं तो यह खाली होता है।

Http अनुरोधों को पूरा करने के लिए forkJoin ऑपरेटर का उपयोग करें और map ऑपरेटर का उपयोग करके उन्हें मैप करें:

getAllPokemonStats(ids: number[]): Observable<PokemonStats[]> {
  return forkJoin(ids.map(id => {
    return this.http.get(`https://pokeapi.co/api/v2/pokemon/${id}`);
  })).pipe(
    map(results => results.map(data => ({
      id: data.id,
      name: data.name,
      speed: data.stats[0].base_stat,
      hp: data.stats[5].base_stat,
      attack: data.stats[4].base_stat,
      defense: data.stats[3].base_stat
    }))),
  );
}
2
cyr_x 30 जून 2020, 11:23