Estoy tratando de crear un rastreador de tareas. BackEnd es mySQL, la API se crea con Node JS y Express JS y el frontend es React JS.
Estoy tratando de asignar a una variable la respuesta que obtengo de la solicitud GET.
la solicitud funciona en PostMan
En mi interfaz, estoy tratando de asignar la variable usando el siguiente código. Como se muestra arriba, la solicitud de obtención funciona en PostMan.
const baseURL = 'http://localhost:5000/api/user/timesheet/13009'; let y = []; axios.get(baseURL).then((response)=>{ for( var i in response.data){ y.push( response.data[i]); } console.log(y); });Esta es la salida en la terminal. Puedo usar índices como y[0] y obtener ese valor en particular. Pero cuando elimino la declaración de impresión y la coloco debajo del código, el valor de y cambia.
const baseURL = 'http://localhost:5000/api/user/timesheet/13009'; let y = []; axios.get(baseURL).then((response)=>{ for( var i in response.data){ y.push( response.data[i]); } }); console.log(y);Obtengo este resultado pero y.length está establecido en 0 y no puedo leer los datos en y.
const baseURL = 'http://localhost:5000/api/user/timesheet/13009'; let y = []; axios.get(baseURL).then((response)=>{ for( var i in response.data){ y.push( response.data[i]); } }); console.log(y); console.log('y.length'); console.log(y.length); console.log('y[0]'); console.log(y[0]);Esto muestra que no hay valor para el índice y que la matriz está vacía. ¿Qué está causando exactamente este problema y cómo se puede solucionar?
Creo que es porque los trabajos que configuró en "entonces ()" se ejecutan después de que funcionó la solicitud de axios, cuando sus datos se recuperaron con éxito. El código después de la llamada axios (una promesa) se ejecuta antes o al mismo tiempo que la promesa, lo que significa que los datos aún no se han recuperado.
como dijo @ Nevermore1803, axios devolverá su solicitud después de un tiempo.
Por lo tanto, es probable que su matriz y que está enviando los valores de axios a, aún no se haya completado para cuando axios haya respondido a la solicitud.
puedes verlo por ti mismo haciendo lo siguiente
axios.get(baseURL).then((response)=>{ for( var i in response.data){ y.push( response.data[i]); } console.log('1') }); console.log('2') Puede ver que 1 vendrá después 2 , por lo que para trabajar con su matriz, antes de intentar usarlo, debe verificar si ya está poblado y luego proceder a trabajar con él.
Una forma de comprobar si tu matriz está vacía es >> if(array.length > 0){... do something}
Además, si está usando reaccionar, debe comenzar a usar sus ganchos, como useState para trabajar con datos como este.