Mam bardzo dziwne zachowanie. Mam następujące JQuery:Czy debugger JS zawiesza całą pętlę zdarzeń JS?
myElement.fadeOut(100);
Występuje jakiś rodzaj wyścigu, tak, że element nie zostanie w końcu ukryty. Jeśli umieściłem debuggera na tej linii i przejdę przez kod, to działa dobrze, a element zanika i zostaje ukryty. Nazwij to jako Heisenbug.
Moje pytanie nie dotyczy stanu wyścigu per se. Chcę wiedzieć, jak to się dzieje, biorąc pod uwagę charakter środowiska wykonawczego JavaScript. Przez mojego zrozumienia następujące predykaty są prawdziwe:
- Fadeout() jest realizowany przez JQuery animate()
- ożywionej() jest realizowane przez szereg
setTimeout()
połączeń setTimeout()
harmonogramów realizacją funkcji w kolejka w pewnym momencie- Po dojściu zdarzeń do początku kolejki, funkcja jest wykonywana.
- Istnieje tylko jedna pętla zdarzeń, która jest wykonywana sekwencyjnie.
- W dowolnym momencie wykonywana jest tylko jedna funkcja/ścieżka przez stację wywoławczą.
Biorąc pod uwagę, że przechodzę przez funkcję w moim debugerze, wykonanie musi zostać zawieszone i nie można wykonywać żadnych innych funkcji.
Nie widzę, jak to możliwe, aby stan wyścigu wystąpił w takich okolicznościach. Czy możesz zasugerować, jak możliwe jest, aby wykonywanie różniło się między debugowanym i nie debugowanym kodem?
Ah wiesz co, jest ładunek ajax. To może być ... – Joe
Skorzystaj z sukcesu lub kompletnego oddzwaniania, a nie limitu czasu, jeśli to się dzieje. Zawsze zakładaj, że ajax może zawiesić się na chwilę. –
Ja na pewno nie użyłem limitu czasu w tym celu! – Joe