
JavaScript - Návržení kódu
Ahoj, poradí někdo, jak napsat lépe takový kód ? Děkuji
var i;
i = 0;
function start(){
if (i === 0) a();
else if (i === 1) b();
else if (i === 2) c();
else if (i === 3) d();
else if (i === 4) e();
else if (i === 5) return; //ukonceni funkce
setInterval(start, 1000);
}
function a() { i = 1; /*..*/}
function b() { i = 2; /*..*/}
function c() { i = 3; /*..*/}
function d() { i = 4; /*..*/}
function e() { i = 5; /*..*/}
start();
js_switch.asp
A co tím jako získám ?
Ahoj, díky.. tak to tak právě nejde, ten kód byl jen pro představu, zase jsem to napal blbě, myslel jsem, že to z toho bude znatelné
OMLUVA!
Každá funkce a,b,c,d a e potřebuje svůj čas k provedení, některá trvá i 15sec. proto jsem uvnitř těch funkcí nastavoval tu var i abych dal funkci start() na vědomí, že se funkce dokončila a že může spustit další. Ale hledám nějaké lepší řešení..
V tom případě je prostě stačí spustit jednu po druhé, ne?
Asi nerozumím, přece JS nečeká až se funkce celá provede, ne ?
Čeká. Nečeká se pouze na dokončení asynchronních volání.
A existuje nějaký 100% způsob jak to zjistím ?
A čo chceš akože zisťovať? Po dokončení funkcie si vypíš napr. echo - "skončil som"...
No jak zjistím, které funkce se volají asynchronně a na které se bude opravdu čekat...
Musíš si napísať asynchronny javascript... Z Tvojho kódu sa žiadna funkcia nevolá asynchronne.
Doporučujem si niečo o tom prečítať - naštudovať, napr: http://www.slideshare.net/clutchski/writing-asynch ronous-javascript-101
Pokud ta funkce neobsahuje callback, tak si můžeš být jistý, že není asynchronní.
To jsem si myslel, ale asi to není pravda... Tu class co jsi mi tady napsal (pár dnů zpět) callback nemá a přesto se na ni nečeká
To se teda čeká. Uvnitř ní se ale používá setTimeout, na jejíž výsledek se nečeká, ale ta má zase callback.
Tak že pokud vnořím 10 funkcí do sebe a některá z nich bude obsahovat systémovou funkci s callbackem, všechno se ruší ?
A jiná funkce stejná jako je setTimeout ale bez callbacku neexistuje ?
Co by se mělo rušit? Nic se neruší. A JS neposkytuje jinou možnost jak psát asynchronní kód než s použitím callbacků.
Myslím, že to, čo hľadáš, sú promisy. V tomto prípade by to mohlo vyzerať napr. takto:
Prípadne príklad so sekundovými odostupmi volaní s použitím zápisu lambda funkcie pomocou šípky (ES6):
Ak chceš použiť funkcionalitu z ES6 v starších prehliadačoch, môžeš použiť kompilátor ako napr. Babel alebo TypeScript. Pre prehliadače, ktoré neimplementujú Promise, môžeš použiť knižnicu, napr. bluebird.