Estoy tratando de iterar a través de una matriz de objetos y llamar a mi API usando el valor del objeto. Y luego inicie sesión en la consola. Mi API devuelve los valores necesarios, pero el resultado es este: [ Promise { <pending> }, Promise { <pending> } ]
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}&limit=1`) .then((response) => response.data.results[0].position) .catch((error) => error.detailedMessage); return position; }); return clientsPositions; } geoEncode().then((result) => console.log(result));Está emitiendo múltiples llamadas a la API y, por lo tanto, creando múltiples promesas. Lo que está viendo en la consola es una matriz de esos objetos de promesa. Debe escribir un código como el siguiente para esperar a que se completen todos.
... Promise.all(geoEncode()).then((values) => { console.log(values); }); ...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 = 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));Promise.All () garantiza que la matriz de todos los códigos de sincronización se ejecute correctamente y devuelve una sola promesa que se resuelve en una matriz de resultados.