es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Retornando posiciones utilizando axios.

Estoy intentando iterar a través de una matriz de objetos y llamar a mi API usando el valor del objeto. Luego, quiero mostrar el resultado en la consola. Mi API está devolviendo los valores necesarios, pero la salida es la siguiente:
[ Promise { <pendiente> }, Promise { <pendiente> } ]

Mi función:

async function geoEncode() {
  const clients = [
    {
      nome: "John",
      address: "Jardim Planalto Sinibaldo Cassino 33",
    },

    {
      nome: "Joseph",
      address: "R. Afrizia Martins Sanacato - Jardim Natalia",
    },
  ];

  const baseUrl = "https://api.tomtom.com";
  const endPoint = "search/2/geocode";
  const format = ".json";
  const apiKey = "Hq2eTTQvtJRna5MMAsAsARlsQCxv5XjR";

  const clientsPositions = clients.map(async (client) => {
    const address = client.address;
    const position = await axios
      .get(`${baseUrl}/${endPoint}/${address}${format}/?key=${apiKey}&amp;limit=1`)
      .then((response) => response.data.results[0].position)
      .catch((error) => error.detailedMessage);

    return position;
  });

  return clientsPositions;
}

geoEncode().then((result) => console.log(result));
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La salida que estás viendo se debe a que la matriz clientsPositions es una matriz de promesas. Esto se debe a que estás utilizando async/await dentro de la función map() para hacer una solicitud asíncrona a tu API para cada objeto en la matriz clients. Esto significa que la función map() está devolviendo una matriz de promesas que eventualmente se resolverán a los resultados de las llamadas a la API.

    Para obtener los resultados reales de las llamadas a la API, debes esperar a que todas las promesas en la matriz se resuelvan. Puedes usar el método Promise.all() para hacer esto. Aquí tienes una versión actualizada de tu código:

    async function geoEncode() {
      const clients = [
        {
          nome: "John",
          address: "Jardim Planalto Sinibaldo Cassino 33",
        },
    
        {
          nome: "Joseph",
          address: "R. Afrizia Martins Sanacato - Jardim Natalia",
        },
      ];
      const baseUrl = "https://api.tomtom.com";
      const endPoint = "search/2/geocode";
      const format = ".json";
      const apiKey = "Hq2eTTQvtJRna5MMAsAsARlsQCxv5XjR";
      const clientsPositions = await Promise.all(clients.map(async (client) => {
        const address = client.address;
        const position = await axios
          .get(`${baseUrl}/${endPoint}/${address}${format}/?key=${apiKey}&limit=1`)
          .then((response) => response.data.results[0].position)
          .catch((error) => error.detailedMessage);
        return position;
      }));
      return clientsPositions;
    }
    
    geoEncode().then((result) => console.log(result));
    

    Aquí, utilizamos Promise.all() para esperar a que todas las promesas en la matriz clientsPositions se resuelvan. Este método devuelve una nueva promesa que se resuelve a una matriz de los valores resueltos de las promesas originales. Luego, registramos esta matriz en la consola.

    Ten en cuenta que removí los caracteres " de tu código, ya que se usaban para escapar comillas, pero en Markdown podemos simplemente usar acentos graves para mostrar código.

Comments are closed.