Существует ли эквивалентная функция сна JavaScript или JQuery?

Можно использовать классы .NET в качестве COM-объектов в Delphi:

  • создают блок в C#
  • , создают библиотеку типов для блока
  • библиотека типов импорта в Delphi

Теперь, можно получить доступ к классам от блока .NET, которые экспортируются в библиотеке типов.

5
задан Flueras Bogdan 14 August 2009 в 10:10
поделиться

5 ответов

Прямого такого не существует. Вам нужно будет указать javascript разбудить «что-то» через некоторое время, используя setTimeout .

Это «что-то» будет кодом, который вы планируете выполнить после сна, конечно.

Из примера, который я нашел в Интернете :

function dothingswithsleep( part ) {
    if( part == 0 ) {
        alert( "before sleep" );
        setTimeout( function() { dothingswithsleep( 1 ); }, 1000 );
    } else if( part == 1 ) {
        alert( "after sleep" );
    }
}

Но это хрупкая конструкция. Вам лучше переосмыслить свою бизнес-логику, чтобы действительно сделать что-то через секунду: вызвать другую функцию вместо использования этих надуманных вспомогательных переменных.

5
ответ дан 18 December 2019 в 11:59
поделиться

используйте

setTimeout

метод

5
ответ дан 18 December 2019 в 11:59
поделиться

Первый вопрос , почему ты хочешь спать в петле? Если это необходимо, возможно, следует создать систему событий. Я сам много раз пробовал тактику сна для многопоточного программирования javascript и обнаружил, что она не работает. Лучший способ сделать многопоточность в javascript - использовать систему событий, такую ​​как предоставляемая YUI или почти любой другой структурой. Попросите вашего слушателя подписаться на это событие и делать что-нибудь всякий раз, когда оно происходит. В этих фреймворках событий у вас есть полный контроль над тем, когда срабатывает ваше собственное событие, поэтому в них нет ничего страшного.

Вот ссылка на фреймворк событий YUI.

http://developer.yahoo.com/yui/examples /event/index.html

Вот как это можно было бы закодировать с использованием YUI

var myEvent = new YAHOO.util.CustomEvent('fooEvent');
// subscribe a function to be called (first param) inside the scope of an object
// (second param).
myEvent.subscribe(function() {alert(this.count++);},{count:0},true);
setTimeout('myEvent.fire()',1000);

. Этот способ сделать это намного чище и компактнее. Или, если вы не хотите использовать структуру событий, попробуйте этот

var myObj = {
    count:0,
    doSomething:function(){alert(this.count++);}
    loopFunc:function(){
        this.doSomething();
        setTimeout('myObj.loopFunc()',1000);
    }
}

, который предлагает то, что вам нужно, и более компактный.

Но если вам ДЕЙСТВИТЕЛЬНО нужна функция сна в вашем коде, я бы рекомендовал сделать синхронный вызов ajax простого серверного скрипта. Затем вы можете использовать код на сервере, чтобы спать, если хотите. Ниже приведена ссылка на размещенный здесь вопрос, в котором показано, как сделать синхронный вызов.

Как заставить jQuery выполнять синхронный, а не асинхронный, Запрос Ajax?

Но я настоятельно рекомендую использовать метод setTimeout. Гораздо чище, и вы, вероятно, не захотите делать какие-либо вызовы на стороне сервера, если можете этого избежать.

2
ответ дан 18 December 2019 в 11:59
поделиться

Я искал / гуглил довольно много веб-страниц по javascript sleep / wait ... и нет ответа, если вы хотите, чтобы javascript был "RUN, DELAY, RUN" ... что большинство людей получил было либо "RUN, RUN (бесполезная штука), RUN", либо "RUN, RUN + RUN с задержкой" ....

Так что я съел гамбургеры и задумался ::: вот решение, которое работает ... но вы должны разбить свои рабочие коды ... :::

// ..................... .................... // example1:

<html>
<body>
<div id="id1">DISPLAY</div>

<script>
//javascript sleep by "therealdealsince1982"; copyrighted 2009
//setInterval
var i = 0;

function run() {
    //pieces of codes to run
    if (i==0){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" is ran</p>"; }
    if (i==1){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" is ran</p>"; }
    if (i==2){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" is ran</p>"; }
    if (i >2){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" is ran</p>"; }
    if (i==5){document.getElementById("id1").innerHTML= "<p>all code segment finished running</p>"; clearInterval(t); } //end interval, stops run
    i++; //segment of code finished running, next...
}

t=setInterval("run()",1000);

</script>
</body>
</html>

// .................................... // example2:

<html>
<body>
<div id="id1">DISPLAY</div>

<script>
//javascript sleep by "therealdealsince1982"; copyrighted 2009
//setTimeout
var i = 0;

function run() {
    //pieces of codes to run, can use switch statement
    if (i==0){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" ran</p>"; sleep(1000);}
    if (i==1){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" ran</p>"; sleep(2000);}
    if (i==2){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" ran</p>"; sleep(3000);}
    if (i==3){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" ran</p>";} //stops automatically
    i++;
}

function sleep(dur) {t=setTimeout("run()",dur);} //starts flow control again after dur

run(); //starts flow
</script>
</body>
</html>
2
ответ дан 18 December 2019 в 11:59
поделиться
function sleep(delay) { 
    var start = new Date().getTime(); 
    while (new Date().getTime() < start + delay); 
} 
0
ответ дан 18 December 2019 в 11:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: