Ho un comportamento molto strano in corso. Ho il seguente JQuery:Il debugger JS sospende l'intero ciclo degli eventi JS?
myElement.fadeOut(100);
V'è una sorta di condizione di competizione in corso, in modo tale che l'elemento non finiscono per essere nascosto. Se metto un debugger su quella linea e passo attraverso il codice, funziona bene e l'elemento si attenua e viene nascosto. Chiamalo a Heisenbug.
La mia domanda non riguarda le condizioni di gara di per sé. Voglio sapere come è possibile che ciò accada data la natura del runtime di JavaScript. Dalla mia comprensione i seguenti predicati sono vere:
- fadeOut() è implementato da JQuery animate()
- animate() è implementato da una serie di
setTimeout()
chiamate setTimeout()
pianifica l'esecuzione di una funzione in una coda ad un certo punto nel tempo- Quando gli eventi raggiungono l'inizio della coda, la funzione viene eseguita.
- C'è solo un ciclo di eventi, che viene eseguito in sequenza.
- In qualsiasi momento, solo una funzione/percorso attraverso il callstack è in esecuzione.
Dato che sto passando una funzione nel mio debugger, l'esecuzione deve essere sospesa e nessun'altra funzione può essere eseguita.
Non riesco a vedere come sia possibile che una condizione di competizione si presenti in queste circostanze. Puoi suggerire come è possibile che l'esecuzione differisca tra codice debug e non debug?
Ah sai cosa, c'è un carico Ajax. Potrebbe essere ... – Joe
Usa il callback completo o completo, non il timeout, se è quello che sta succedendo. Presuma sempre che ajax potrebbe restare un po 'in attesa. –
Sicuramente non ho usato un timeout per questo scopo! – Joe