Czy wywołanie zwrotne przekazane do funkcji setInterval
zostanie wywołane, nawet jeśli poprzedni (uruchomiony tym samym setInterval
) nie został zakończony jego praca jeszcze? Jeśli tak, co mogę zrobić, aby obejść to zachowanie? Czy należy używać własnej flagi binarnej (np. inProcess
) lub dzwonić pod numer setTimeout
za każdym razem zamiast setInterval
?Czy wywołanie zwrotne przekazane do setInterval zostanie uruchomione, nawet jeśli poprzednie nie zakończyło jeszcze swojej pracy
6
A
Odpowiedz
0
Zasadniczo tak, wywołanie zwrotne z setInterval (..) jest uruchamiane, nawet niektóre poprzednie instrukcje nie są jeszcze zakończone. Myślę, że flaga inProcess jest najbardziej czystym rozwiązaniem dla ciebie (nawet najbardziej zrozumiałym).
1
Sugerowałbym użycie setTimeout
.
Miałem podobny problem i gdzie musiałem odpytywać serwer dla pewnych danych co 3 s, aż otrzymam dane lub osiągnięty zostanie próg. Napisałem coś takiego:
function getData(){
$.post(url,data, function(res){
if((res.error || res.data.length === 0) && pollCount < 20){
initTimeout();
}
else{
processData(res.data);
}
})
}
function initTimeout(){
var delay = 3000;
setTimeout(function(){ getData(); },delay)
}
initTimeout();
zaletą tego podejścia jest to,
- Po pierwsze, nie trzeba wprowadzać
interval/timeout
zmienną jako global/w zakresie dominującej, więc można wyczyścić na sukces. - drugie
initTimeout
można rodzajowy jak
function initTimeout(callback, delay) {
setTimeout(function() {
callback();
}, delay);
}
Powiązane problemy
- 1. Wywołanie zwrotnego akordu, nawet jeśli główne zadania zakończą się niepowodzeniem
- 2. Jak działają pojemności kontenerów Docker, nawet jeśli nie są uruchomione?
- 3. Android GoogleAuthUtil.getTokenWithNotification Intent wywołanie zwrotne nie wyzwala
- 4. Uruchomić aplikację AlarmManager, jeśli urządzenie zostanie ponownie uruchomione.
- 5. wywołanie zwrotne() lub zwrotne oddzwonienie()
- 6. Jeśli działanie zostanie zatrzymane, a następnie odtworzysz to, co zostanie przekazane do getIntent()
- 7. navigator.geolocation.getCurrentPosition(): wywołanie zwrotne pożaru, jeśli użytkownik mówi "nie"?
- 8. Zdarzenie nie uruchomione podczas pracy jako usługa
- 9. jQuery remove() wywołanie zwrotne?
- 10. wywołanie zwrotne do obsługi zakończenia rury
- 11. Poczekaj, aż zostanie uruchomione zdarzenie kliknięcia C#
- 12. Jak dodać wywołanie zwrotne do metody .apply()?
- 13. Czy jest wywołanie zwrotne dla History.pushstate?
- 14. Glide: wywołanie zwrotne onError
- 15. bashrc nie ładuje się, dopóki nie zostanie uruchomione polecenie bash
- 16. Node.js wywołanie zwrotne serwera socket.io nie działa
- 17. Czy przycisk Pinterest ma wywołanie zwrotne?
- 18. jQuery UI Sortable: Przywrócić zmiany, jeśli wywołanie zwrotne aktualizacji powoduje wywołanie AJAX, które nie powiedzie się?
- 19. wywołanie setInterval działa tylko raz
- 20. Szuflada nawigacji zostanie zamknięta, nawet jeśli nadpisano onBackPressed()
- 21. wywołanie zwrotne do funkcji po zakończeniu .each()?
- 22. Google reCAPTCHA dane-wywołanie zwrotne nie działa
- 23. Czy wszystkie obrazy tła CSS zostaną załadowane, nawet jeśli CSS nie zostanie zastosowany?
- 24. Poczekaj, aż poprzednie .append() zostanie zakończone
- 25. AsyncTask zawsze będzie działał, nawet jeśli aplikacja zostanie zniszczona?
- 26. Czy parametry przekazane do urządzenia pytest zostaną przekazane jako zmienna?
- 27. Jak zaimplementować "wywołanie zwrotne" w Ruby?
- 28. Czy można zdefiniować wywołanie zwrotne "before_save" w module?
- 29. Jak przetestować wywołanie zwrotne after_initialize modelu szyn?
- 30. wywołanie zwrotne zdarzenia jquery change
Tak. Jeśli chcesz poczekać, aż się skończy, powinieneś użyć 'setTimeout()' i wywołać je tylko po zakończeniu pracy. –