Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Отсрочить функцию (https://javascript.ru/forum/events/48273-otsrochit-funkciyu.html)

diprom 27.06.2014 12:17

Отсрочить функцию
 
Здравствуйте.
Есть продолжительная функция function ExpandTree(treex)
{
....

}
Хочу обернуть ее в параметр другой функции, чтобы она выполнилась с отсрочкой, а не выполнялась сразу в параметре.
WorkFunc( ExpandTree(treex),"Идет выполнение операции ...");

function WorkFunc(func,text)
{
	VisibleMessageDialog(text); 
	var ktimeout = setTimeout(function Work()
	{			
		func;
		HideMessageDialog();			
		clearTimeout(ktimeout);					
	}, 500);
}


Но ExpandTree(treex) начинает выполнять сразу и окошка отображения не видно, а хочется чтобы выполнялась внутри подфункции Work, а не раньше.

Спасибо.

Brutus 27.06.2014 23:16

<script>
  function WorkFunc(func)
  {
    //VisibleMessageDialog(text);
    setTimeout(function ()
               {			
                 func();
                 //HideMessageDialog();					
               }, 2000);
  }
  function ExpandTree(treex)
  {
    alert(0)
  }
  WorkFunc(ExpandTree)
</script>

foo 28.06.2014 00:59

Типа этого не пойдет?
p=document.createElement("p")
p.style.display="none"
document.body.appendChild(p)
showMsg=function(text){
   p.innerHTML=text;
   p.style.display="block";
};
hideMsg=function(){p.style.display="none"}

long=function(text){
   var i=100000000
   while(i){
      i--
   }
   document.body.appendChild(document.createTextNode(text))
}

wrapper=function(fu, arg, text){
    showMsg(text)
    setTimeout(function(){
       fu(arg)
       hideMsg()
    }, 1000)
}


wrapper(long, "bla-bla-bla", "I'm first!")

Brutus 28.06.2014 01:27

foo,
Пойдёт :)

p.s

wrapper=function(fu, arg, text){
    showMsg(text)
    var id=setTimeout(function(){
       fu(arg)
       hideMsg()
       clearTimeout(id)//БЕСПОЛЕЗНАЯ СТРОЧКА!!! Имеет смысл вне конструкции
    }, 1000)
}

===
wrapper=function(fu, arg, text){
    showMsg(text)
    setTimeout(function(){
       fu(arg)
       hideMsg()
    }, 1000)
}

foo 28.06.2014 01:41

Цитата:

Сообщение от Brutus
БЕСПОЛЕЗНАЯ СТРОЧКА!!! Имеет смысл вне конструкции

А, ну да, я просто на код ТС'a посмотрел, машинально написал. Спасибо:)

diprom 28.06.2014 10:35

Спасибо, то что надо.


Часовой пояс GMT +3, время: 14:59.