Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

259
Views
¿Cómo permito que la función n.° 2 se ejecute solo después de que se complete la función n.° 1, pero sin activar la función n.° 2?

Tengo 2 funciones, onTouchStart y onTouchEnd, donde onTouchEnd usa una variable de estado que establece onTouchStart. Me preocupa que la función onTouchEnd pueda leer el valor incorrecto de una variable de estado porque es posible que onTouchStart no haya terminado de configurar el estado. El principal problema es que no quiero que onTouchEnd se active cada vez que finaliza onTouchStart, pero necesito onTouchStart para establecer la variable almacenada en el estado en el valor correcto antes de que se ejecute onTouchEnd.

 onTouchStart(){ this.setState({ randomBool: true }); } onTouchEnd(){ console.log("randomBool should be true: " + this.state.randomBool); //then some stuff here }
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Puede usar una marca seguida de setTimeout :

 onTouchEnd(){ if (!this.state.randomBool) setTimeout(this.onTouchEnd, 10); //then some stuff here }

Si es necesario, también puede pasar parámetros a la llamada "recursiva": setTimeout(() => this.onTouchEnd(v1, v2), 10);

about 4 years ago · Juan Pablo Isaza Report

0

Para hacer esto de manera determinista, necesita algún estado en el que pueda escribir sincrónicamente, y necesita algo que indique que setState se ha completado.

(Supongo aquí que setState proporciona esta indicación en forma de promesa).

En el fragmento a continuación, mantenga presionado el mouse durante menos de un segundo y luego vuelva a intentarlo durante más de un segundo...

 document.getElementById("touchMe").addEventListener('mousedown', onTouchStart); document.getElementById("touchMe").addEventListener('mouseup', onTouchEnd); let state; // assuming we can only read and write this async... // ...with this getter and setter async function setState(object) { return new Promise(resolve => { setTimeout(() => { state = object resolve() }, 1000); }) } async function getState() { return new Promise(resolve => { setTimeout(() => { resolve(state) }, 1000); }) } // BUT, we can write this synchronously let settingState = false; function onTouchStart() { settingState = true; setState({ someBool: true }).then(() => { settingState = false; }) } function onTouchEnd() { if (settingState) { console.log("giving up, because we're busy writing state"); return; } console.log("we can get state now"); getState().then(state => console.log(state)); }
 <div id="touchMe" style="background-color:yellow;">Touch Me</div>

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!