Estoy creando un juego con Phaser 3. Tengo una llamada ajax que quiero hacer cada segundo para obtener datos del jugador así:
//Var is globally declared var player1type; create() { setInterval(function() { function gameWaitingroom(getWaitingroom) { $.ajax({ type: "GET", url: '../includes/waitingroomcheck.php', cache: false, success: getWaitingroom }); } // resolve/success callback gameWaitingroom(result => { try { var waitingRoomData = JSON.parse(result); } catch (error) { console.log('Error parsing JSON:', error, result); } //status = waitingRoomData.statusCode; player1type = waitingRoomData.player1type; console.log("INSIDE INTERVAL: "+player1type); }); },1000); console.log("OUTSIDE INTERVAL: "+player1type); }Mi consola dice así:
INSIDE INTERVAL: user OUTSIDE INTERVAL: undefined¿Por qué var player1type no está definido fuera de setInterval, pero funciona bien dentro, aunque lo he declarado globalmente?
Esto se debe a que cuando el script se ejecuta por primera vez, el código en setInterval() tardará 1 segundo en ejecutarse, mientras que el que está fuera se ejecutará instantáneamente. Así que para el momento console.log("OUTSIDE INTERVAL: "+player1type); se ejecuta, su valor será undefined , eso se debe a que player1type = waitingRoomData.player1type; todavía estará esperando que se ejecuten 1s.