Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

202
Vistas
La llamada a la función Axios no devolverá datos

Estoy seguro de que este es un problema con mi comprensión/implementación. El problema es que estoy tratando de devolver la ID del objeto creado a una matriz para que esa matriz pueda insertarse más tarde en otro objeto. Moviendo el .then() entre la función, la llamada, nada parece funcionar. Empujar a la matriz, asignar el valor a la matriz a través del índice no parece funcionar. Se agradece cualquier información/orientación sobre cuál es el problema raíz y un camino para resolverlo.

índice.js

 const contacts = document.getElementsByName('newContact'); const contactName = document.getElementsByName('contactName'); const contactTitle = document.getElementsByName('contactTitle'); const contactPhone = document.getElementsByName('contactPhone'); const contactEmail = document.getElementsByName('contactEmail'); let contactIDArray = new Array(); for (let i = 0; i < contacts.length; i++) { const name = contactName[i].value; const title = contactTitle[i].value; const phone = contactPhone[i].value; const email = contactEmail[i].value; var id; createContact(name, title, phone, email).then(function (res) { id = res.data.id; alert(res.data.id); return id; }); alert(id);

contacto.js

 import axios from 'axios'; export const createContact = async (contactName, contactTitle, contactPhone, contactEmail) => { try { const res = await axios({ method: 'POST', url: '/api/v1/contacts', data: { contactName, contactTitle, contactPhone, contactEmail, }, }); return res.data.id; } catch (err) { console.log(err); } };
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Hay varios problemas que puedo ver:

  1. Como dice VLAZ en el comentario, está tratando de obtener el .data.id en un valor que ya es una identificación
  2. La creación de una secuencia de promesas debe realizarse con las herramientas proporcionadas por Promise util ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all podría ser lo que está buscando por).

Por ejemplo, iría con algo en ese sentido (no probado):

 const contacts = document.getElementsByName('newContact'); const contactName = document.getElementsByName('contactName'); const contactTitle = document.getElementsByName('contactTitle'); const contactPhone = document.getElementsByName('contactPhone'); const contactEmail = document.getElementsByName('contactEmail'); let contactIDArray = new Array(); const requests = [] for (let i = 0; i < contacts.length; i++) { const name = contactName[i].value; const title = contactTitle[i].value; const phone = contactPhone[i].value; const email = contactEmail[i].value; var id; promise = createContact(name, title, phone, email).then(function (res) { const id = res.data.id; alert(res.data.id); return id; }); requests.push(promise) } Promise.all(requests).then(ids => { // This should contain the array of ids alert(ids) })

Editar: Además, tenga cuidado al compartir el resultado entre llamadas sincrónicas y asincrónicas, por lo general, permanecería en el mundo asincrónico una vez que comenzara sus tareas asincrónicas, como se indica aquí: Cómo devolver datos de la promesa

about 4 years ago · Juan Pablo Isaza Denunciar

0

I'm trying to return the ID of the created object into an array so that array can later be inserted into another object

En base a su solicitud, tengo algunas cosas para usted:

  1. Al igual que la respuesta de jkoestinger, no use async/await o funciones asíncronas ( .then() ) dentro de un ciclo a menos que realmente lo necesite.
  2. No devuelva una propiedad directamente desde la llamada asíncrona, debe devolver el objeto completo y obtener el ID. Esta es una buena práctica.

Por favor, vea el código modificado a continuación:

índice.js

 let contactPromises = []; for (let i = 0; i < contacts.length; i++) { const name = contactName[i].value; const title = contactTitle[i].value; const phone = contactPhone[i].value; const email = contactEmail[i].value; contactPromises.push(createContact(name, title, phone, email)); } let contacts = (contactPromises.length > 0) ? await Promise.all(contactPromises) : []; let contactIds = contacts.map(contact => contact.id); // use your contactIds here

axios

 let res = await axios({ method: 'POST', url: '/api/v1/contacts', data: { contactName, contactTitle, contactPhone, contactEmail, }, }); return res.data; // <--- return res.data only, not the res.data.id
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda