Autor Zpráva
Amento
Profil *
Ahoj,

mam tento for cyklus


for () {

  vypis('ahoj', function() { // dobrý můžeš pokračovat v cyklu });

}



a tuto funkci


function vypis(msg, callback) {

  if(alert(msg)) { callback(); }

}



a jde mi oto, aby v momentě, kdy se zavolá callback cyklus pokračoval, jinak čekal.

vypis('ahoj', function() { // dobrý můžeš pokračovat v cyklu });



Jak na to? Díky.
Baggz
Profil
Viz http://stackoverflow.com/questions/2238621/question-about-loops-and-continue.
Chamurappi
Profil
Reaguji na Amenta:
aby v momentě, kdy se zavolá callback cyklus pokračoval, jinak čekal
Na co by měl čekat? Jak se projevuje to, že (podle tebe) nečeká?


Reaguji na Baggza:
Nemyslím si, že se ptá na tohle.
Witiko
Profil
Amento: Pokud ti jde o vytvoření samostatného vlákna (a to v uvozovkách, protože javascript je ze své přirozenosti singlethreaded), tak jediné co ti asi zbyde bude použití setTimeout. Opakuji, že javascript nedokáže pracovat ve více vláknech najednou a pokud je script zaneprázdněný, tak funkci přiřazenou k setTimeout provede až po dokončení cyklu. (http://ejohn.org/blog/how-javascript-timers-work/)

for (/* tady to doufám nezůstane do budoucna prázdné */) {

  window.setTimeout(function() {
    vypis('ahoj', function() {});
  },1);
  
}


Jinak věc číslo 2: Jak si má člověk vysvětlit if(alert(msg)) podmínku? Funkce alert nenavrací žádnou hodnotu kromě undefined, která není považovaná za true a k zavolání funkce callback tedy nikdy nedojde, protože podmínka nikdy nebude splněna. Pokud jde o zavolání callback po odkliknutí okna alertu, tak musím zklamat - alert se sice chová jako nemodální okno, nicméně není možné prakticky jakkoliv detekovat (napadá mě možnost zjištění pomocí testování souřadnic myši, ale to je hodně šílené) zda uživatel okno zavřel. Některé prohlížeče nepokračují v kódu dokud uživatel alert okno nezavřeč, ostatní v kódu pokračují.

Pokud vadí, doporučuji vlastní UI, spíš bych ale zapřemýšlel, jestli je skutečně záměrem zasypat uživatele hromadou alertů na odklikání cyklem, jestli by nebylo lepší data nashromáždit v proměnné a poté uživateli předat.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0