-
Data: 2009-01-11 15:29:28
Temat: Re: Kolejkowanie w JavaScript
Od: emil <e...@p...onet.pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Krzysztof Antczak wrote:
> Witam Grupowiczów.
>
> Staram się stworzyć coś w rodzaju kolejki funkcji, który powinny się
> wykonać jedna PO drugiej. I tu pojawia się problem, ponieważ javascript
> jest bardzo oporny w kierunku ułatwienia dostępu do jakiegoś
> ReflectionAPI. Wszystkie moje pomysły zawiodły, ze względu na
> ograniczenia JS, a było tych pomysłów naprawdę sporo.
>
> Do rzeczy (przykład jednego z pomysłów):
>
> var queue = new QueueManager ();
> queue.add( 'foo' );
> queue.add( 'bar' );
> queue.add( 'function () {}' );
> queue.exec ();
>
> Niestety wygląda ładnie, a działać nie chce. Dlaczego? Dlatego, że
> istnieją w JS funkcje typu: setTimeout/setInterval, które niweczą cały
> misterny plan.
Te funkcje nie istnieją w JS, tylko są udostępniane przez obiekt window
przeglądarki. W czystym JS ich nie ma.
Na pozczątku z głupia frant zapytam co tak naprawdę chcesz zrobić,
dlatego, że przeglądarkowy JS jest z natury asynchroniczny (to znaczy
wywołanie funkcji jest z reguły odpowiedzią na jakieś zdarzenie) i
raczej nie programuje się w nim kolejek wykonania.
Nie rozumiem z jakiego powodu setTimeout/setInterval niweczą plan.Nawet
w przypadku kolejki powinieneś się nimi posłużyć,np.:
NIE:
for(var i=0;i<queue.length;i++) {
queue[i]()
}
TAK:
var intv = setInterval(function() {
if(!queue.length) {
clearInterval(intv);
return;
}
queue.pop()()
},100);
bo jeśli suma czasu wykonania Twoich funkcji będzie za długa, to
zawiesisz przeglądarke z ładnym komunikatem do usera czy chce przerwać
działania sktyptów.
Co jeszcze. JavaScript w przeglądarce jest jednowątkowy. To znaczy, że
jeśli wykonujesz jedną funkcję do czasu jej zakończenia nie uruchomi się
żadna inna funkcja niezależnie od tego czy wywołujesz ją normalnie czy
przez setTimeout.
Więc: jesteś pewien, że potrzebujesz kolejki wykonania?
IMHO raczej powinieneś inaczej podejść do problemu.
Pozdrawiam
emil
Następne wpisy z tego wątku
- 11.01.09 16:18 Krzysztof Antczak
- 12.01.09 03:00 Rafal\(sxat\)
Najnowsze wątki z tej grupy
- Brednie w wiki - hasło Dehomag
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- U nas propagują modę na SI, a w Chinach naukowcy SI po kolei umierają w wieku 40-50lat
- C++. Podróż Po Języku - komentarz
- "Wuj dobra rada" z KDAB rozważa: Choosing the Right Programming Language for Your Embedded Linux Device
- Nowa ustawa o ochronie praw autorskich - opis problemu i szkic ustawy
- Alg. kompresji LZW
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
Najnowsze wątki
- 2025-05-03 gazowe kuchnie są znacznie bardziej szkodliwe dla zdrowia, niż dotychczas sądzono
- 2025-05-03 Czyli jednak elektryki są TANIE i powszechnie dostępne dla obywateli
- 2025-05-03 Elektryki do Morskiego Oka do utylizacji
- 2025-05-03 Crash testy na publicznej drodze - 4 BMW zderzone
- 2025-05-03 pojebane Google
- 2025-05-03 Brednie w wiki - hasło Dehomag
- 2025-05-03 gazowe kuchnie są znacznie bardziej szkodliwe dla zdrowia, niż dotychczas sądzono
- 2025-05-03 Chiny => Koordynator Produkcji / Przedstawiciel ds. rozwoju produktu <
- 2025-05-03 Gdańsk => Konsultant wdrożeniowy (systemy controlingowe) <=
- 2025-05-03 Warszawa => Frontend Developer (Angular13+) <=
- 2025-05-02 Gliwice => Business Development Manager - Network and Network Security
- 2025-05-02 Warszawa => Senior Frontend Developer (React + React Native) <=
- 2025-05-02 Polska => Senior Key Account Manager <=
- 2025-05-02 Warszawa => Senior Programmer C <=
- 2025-05-02 Gdańsk => Team Lead Data Engineer (Snowflake) <=