6 Stimmen

Schlafen in Javascript - kein setTimeout

Alle diese setTimeout-Antworten hier funktionieren nicht!

Ich möchte einfach ein paar Sekunden zwischen zwei Funktionen warten, so wie hier:

do_fn1();

warten(5000);

do_fn2();

0voto

Liangliang Zheng Punkte 1703

Ein weiterer Hack, den ich wahrscheinlich verwenden werde, aber persönlich würde ich es nicht empfehlen.
Schau hier http://jsfiddle.net/S6Ks8/1/

function parseSleeps(func){
    var fdef = func.toString();

    var fbody = fdef.match(/\{([\s\S]*)\}/)[1].split(/sleep\(.*?\)\;?/);
    var sleeps = fdef.match(/sleep\((.*?)\)/g);
    var fargs = fdef.match(/\(([\s\S]*?)\)/)[1];

    var fbodyNew = [];
    var times = [];
    fbodyNew.push(fbody.shift(), '\n');
    for(var i = 0; sleeps && i < sleeps.length; i++){
        var sec = sleeps[i].match(/\d+/)[0];
        times.push(sec);
        fbodyNew.push('setTimeout(function(){\n');
        fbodyNew.push(fbody.shift(), '\n');
    }

    while(times.length){
        var sec = times.pop();
        fbodyNew.push('}, ', sec, ');\n');
    }

    return new Function(fargs, fbodyNew.join(''));
}

// Dein Code ab hier

function a(str1, str2){
    alert(str1);
    sleep(3000);
    alert(str2);
}

var func = parseSleeps(a);
func('hier', 'dort');

0voto

Leo Selig Punkte 1052

Der klügste Weg wäre etwas wie das zu haben

function a() {
    // Mach Sachen
    setTimeout(b, 42)
}

function b() {
    // Mach andere Sachen verzögert
}    

Blockiere niemals Threads in JS - wenn du denkst, dass du das tun musst, gibt es definitiv einen "saubereren" Weg, um dein Ziel zu erreichen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X