jQuery: wacht/vertraging 1 seconde zonder code uit te voeren

Ik krijg de .delaymethode niet werkend in jQuery:

$.delay(3000); // not working
$(queue).delay(3000); // not working

Ik gebruik een while-lus om te wachten tot een ongecontroleerde veranderende waarde groter is dan of gelijk is aan een andere en ik kan geen manier vinden om de uitvoering X seconden uit te voeren.


Antwoord 1, autoriteit 100%

$.delay wordt gebruikt om animaties in een wachtrij te vertragen, niet om de uitvoering te stoppen.

In plaats van een while-lus te gebruiken, moet u recursief een methode aanroepen die de controle elke seconde uitvoert met behulp van setTimeout:

var check = function(){
    if(condition){
        // run when condition is met
    }
    else {
        setTimeout(check, 1000); // check again in a second
    }
}
check();

Antwoord 2, autoriteit 99%

Je kunt een bewerking ook op deze manier uitstellen:

setTimeout(function (){
  // Something you want delayed.
}, 5000); // How long do you want the delay to be (in milliseconds)? 

Antwoord 3, autoriteit 15%

ES6 setTimeout

setTimeout(() => {
  console.log("we waited 204586560000 ms to run this code, oh boy wowwoowee!");
}, 204586560000);

Bewerken: 204586560000 ms is de geschatte tijd tussen de oorspronkelijke vraag en dit antwoord… ervan uitgaande dat ik correct heb berekend.


Antwoord 4, autoriteit 5%

jQuery’s delay-functie is bedoeld om te worden gebruikt met effecten en effectwachtrijen, zie de delaydocsen het voorbeeld daarin:

$('#foo').slideUp(300).delay(800).fadeIn(400);

Als je een variabele wilt observeren voor wijzigingen, kun je zoiets doen als

(function() {
    var observerInterval = setInterval(function() {
        if (/* check for changes here */) {
           clearInterval(observerInterval);
           // do something here
        }
    }, 1000);
})();

Antwoord 5, autoriteit 5%

Als u ES6-functies gebruikt en u zich in een asynchrone functie bevindt, kunt u de uitvoering van de code gedurende een bepaalde tijd effectief stoppen met deze functie:

const delay = millis => new Promise((resolve, reject) => {
  setTimeout(_ => resolve(), millis)
});

Zo gebruik je het:

await delay(5000);

Het stopt voor het gevraagde aantal milliseconden, maar alleen als je een asynchrone functie hebt. Voorbeeld hieronder:

const myFunction = async function() {
  // first code block ...
  await delay(5000);
  // some more code, executed 5 seconds after the first code block finishes
}

Antwoord 6, autoriteit 4%

JavaScript setTimeoutis een zeer goede oplossing:

function funcx()
   {
   // your code here
   // break out here if needed
   setTimeout(funcx, 3000);
   }
funcx();

De functie delayin jQuery wordt meestal gebruikt voor het vertragen van animaties in een jQuery-animatiewachtrij.


Antwoord 7, autoriteit 3%

delay()stopt de codestroom niet en voert deze vervolgens opnieuw uit. Er is geen praktische manier om dat in JavaScript te doen. Alles moet worden gedaan met functies die callbacks aannemen, zoals setTimeoutdie anderen hebben genoemd.

Het doel van jQuery’s delay()is om een animatiewachtrij te laten wachten voordat deze wordt uitgevoerd. Dus bijvoorbeeld $(element).delay(3000).fadeIn(250);laat het element na 3 seconden infaden.


Antwoord 8, autoriteit 2%

Javascript is een asynchrone programmeertaal, dus je kunt de uitvoering een tijdje niet stoppen; de enige manier waarop u een uitvoering [pseudo] kunt stoppen, is door setTimeout() te gebruiken, wat geen vertraging is maar een “vertraagde functieaanroep”.


Antwoord 9, autoriteit 2%

Alleen javascript Het werkt zonder jQuery

<!DOCTYPE html>
<html>
    <head>
        <script>
            function sleep(miliseconds) {
                var currentTime = new Date().getTime();
                while (currentTime + miliseconds >= new Date().getTime()) {
                }
            }
            function hello() {
                sleep(5000);
                alert('Hello');
            }
            function hi() {
                sleep(10000);
                alert('Hi');
            }
        </script>
    </head>
    <body>
        <a href="#" onclick="hello();">Say me hello after 5 seconds </a>
        <br>
        <a href="#" onclick="hi();">Say me hi after 10 seconds </a>
    </body>
</html>

Antwoord 10, autoriteit 2%

function sleep(num) {
    var now = new Date();
    var stop = now.getTime() + num;
    while(true) {
        now = new Date();
        if(now.getTime() > stop) return;
    }
}
sleep(1000);   // 1 second 
alert('here');

deze code werkt goed voor mij.

Other episodes