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

170
Vistas
How to wait for a state change asynchronously in Javascript

I want to return the state of o from waitState once the state has changed from false to true. I can't see how not to return immediately :

https://jsfiddle.net/msLzovch/1/

o = {
    state: false
}

async function waitState() {

  let timerId = setInterval(checkState, 1000);
  
  function checkState() {
      if (o.state == true) {
          clearInterval(timerId);
      }
  }
  
  return o.state; // wrong here
  
}

function theEnd() {
  o.state = true;
}

setTimeout(theEnd, 5000);

async function main() {
  let state = await waitState();
  alert(state);
}

main();
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Your code doesn't work as you expect because there is nothing preventing the funcion waitState() from returning a value immediately. setInterval() will just return an id that will be stored in timerId and o.state is accessible.

But you don't need to have a loop reading the variable, you can override the object's set method:

const o = {
  state: false
}

Object.defineProperty(o, 'state', {
  set: (value) => {
    this.state = value
    // call your custom function
  }
})

o.state = true // your custom function will be called
about 4 years ago · Juan Pablo Isaza Denunciar

0

You can use a promise:

o = {
    state: false
}

async function waitState() {
  return new Promise(resolve => {
    let timerId = setInterval(checkState, 1000);
  
    function checkState() {
      if (o.state == true) {
        clearInterval(timerId);
        resolve(o.state);
      }
    }
  });
}

function theEnd() {
  o.state = true;
}

setTimeout(theEnd, 5000);

async function main() {
  let state = await waitState();
  alert(state);
}

main();

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