getUsers(); function getUsers(){ console.log('Start'); $.ajax({ url: 'https://jsonplaceholder.typicode.com/users', method: 'GET', dataType: 'json', success: function (data) { data.forEach(user => { console.log(user.id); }); }, error: function () { console.log(data.status); } }) console.log('End'); }El ejemplo de código anterior debe imprimir lo siguiente: ID de inicio ... Fin
Sin embargo tiene el siguiente problema: El orden de impresión de los datos es incorrecto. Imprime Start End data-object
Sé que tiene que ver con async, sin embargo, no puedo solucionar el problema. Probé muchas cosas como $.When() Promise async/await Pero ninguna de ellas ayudó.
Entonces, ¿podría mostrar cómo solucionar este problema?
Gracias de antemano
Ajax es asíncrono, la función de success o error se llamará más tarde, cuando el servidor responda al cliente. Es por eso que a veces puede ver data.status antes de End en su última declaración de console.log . En segundo lugar, los datos que obtiene de la respuesta no contienen el campo de success . La función de devolución de llamada exitosa recibe tres argumentos: los datos devueltos desde el servidor, formateados de acuerdo con el parámetro dataType o la función de devolución de llamada dataFilter , si se especifica; una string que describe el estado; y el objeto jqXHT . En su código, solo le está pasando el primer argumento, que son los datos devueltos por el servidor.