PokeApi Integration - Tylung/vue-apuntes GitHub Wiki

Integración de la PokemonApi

Primero llamamos a la instancia de axios desde el archivo @/api/pokemonApi

import pokemonApi from '@/api/pokemonApi';

Contenido del archivo pokemonApi:

import axios from 'axios'

const pokemonApi = axios.create({
    baseURL: 'https://pokeapi.co/api/v2/pokemon'    
})

export default pokemonApi

La función getPokemons crea un arreglo de 650 de lenght y lo rellena con numeros, del 1 al 650, son 650 porque es la cantidad de pokemones que tienen imagen en el Api


export const getPokemons = () => {

    const pokemonsArr = Array(650).fill(null)

    return pokemonsArr.map( ( _, index ) => index + 1 )
}

La función getPokemonNames recibe un arreglo de 4 numeros, esos numeros serán los id de los pokemons y crea un array de promesas, estas promesas realizan una petición a la PokemonApi y todas se resuelven con un promise.all y al final se retorna un arreglo de los nombres de los pokemones y su respectivo id


export const getPokemonNames = async ( [a, b, c, d  ] = [] ) => {

    const arrPromises = [
        pokemonApi.get(`/${ a }`),
        pokemonApi.get(`/${ b }`),
        pokemonApi.get(`/${ c }`),
        pokemonApi.get(`/${ d }`)
    ]

    const [p1, p2, p3, p4 ] = await Promise.all( arrPromises )

    return [
        { name: p1.data.name, id: p1.data.id},
        { name: p2.data.name, id: p2.data.id},
        { name: p3.data.name, id: p3.data.id},
        { name: p4.data.name, id: p4.data.id}
    ]
}

La funcion getPokemonOptions realiza la funcion getPokemonNames a un arreglo de 4 numeros con valores random y retorna el arreglo de objetos con la infomación de esos 4 pokemones

const getPokemonOptions = async () => {

    const mixedPokemons = getPokemons().sort( () => Math.random() - 0.5 )

    const pokemons = await getPokemonNames( mixedPokemons.splice(0, 4) )

    return pokemons
}

Al final del archivo se exporta de manera default la funcion getPokemonOptions

export default getPokemonOptions

Y se manda a llamar en el PokemonPage.vue

import getPokemonOptions from '@/helpers/getPokemonOptions'

Y se utiliza en el método mixPokemonArray()

  async mixPokemonArray() {
            this.pokemonArr = await getPokemonOptions()

            const rndInt = Math.floor( Math.random() * 4 )
            this.pokemon = this.pokemonArr[rndInt]
    },