Javascript睡眠/延迟/等待功能

use*_*237 16 javascript sleep function delay wait

对不起,如果此问题已在此处提出,我找不到合适的答案.

我想创建一个JavaScript睡眠/延迟/等待函数,我可以在脚本中的任何地方调用它,比如jQuery .delay()

我无法使用setTimeout,因为我有一个由php生成的脚本,因此无法将其放入两个不同的函数中,中间超时.我需要创建一个允许我这样做的功能

alert("time started");
sleep(4000);
alert("time up");
Run Code Online (Sandbox Code Playgroud)

真的不想使用jQuery.

Dee*_*eep 15

你不能只是放入一个函数来暂停Javascript.

你必须使用 setTimeout()

例:

function startTimer () {
    timer.start();
    setTimeout(stopTimer,5000);
}

function stopTimer () {
    timer.stop();
}
Run Code Online (Sandbox Code Playgroud)

编辑:

对于用户生成的倒计时,它就是这么简单.

HTML:

<input type="number" id="delay" min="1" max="5">
Run Code Online (Sandbox Code Playgroud)

JS:

var delayInSeconds = parseInt(delay.value);
var delayInMilliseconds = delayInSeconds*1000;

function startTimer () {
    timer.start();
    setTimeout(stopTimer,delayInMilliseconds);
}

function stopTimer () {
    timer.stop;
}
Run Code Online (Sandbox Code Playgroud)

现在你只需要添加一个触发器startTimer(),例如onchange.


Ani*_*wal 12

这是使用新的 async/await 语法的解决方案。

async function testWait() {
    alert('going to wait for 5 second');
    await wait(5000);
    alert('finally wait is over');
}

function wait(time) {
    return new Promise(resolve => {
        setTimeout(() => {
            resolve();
        }, time);
    });
}
Run Code Online (Sandbox Code Playgroud)

注意:只能在异步函数中调用函数等待


Pau*_* S. 10

您将不得不使用setTimeout,因此我将您的问题视为

我有一个由PHP生成的脚本,因此无法将其放入两个不同的函数中

什么阻止您在脚本中生成两个函数?

function fizz() {
    var a;
    a = 'buzz';
    // sleep x desired
    a = 'complete';
}
Run Code Online (Sandbox Code Playgroud)

可以改写为

function foo() {
    var a; // variable raised so shared across functions below
    function bar() { // consider this to be start of fizz
        a = 'buzz';
        setTimeout(baz, x); // start wait
    } // code split here for timeout break
    function baz() { // after wait
        a = 'complete';
    } // end of fizz
    bar(); // start it
}
Run Code Online (Sandbox Code Playgroud)

你会注意到a内部baz启动就像buzz调用它一样,在调用结束时,a内部foo将是"complete".

基本上,将所有变量包装在函数中,将所有变量移动到包装函数中,以便包含的函数继承它们.然后,每次你遇到时wait NUMBER secondsecho一个setTimeout,结束该功能,并开始了新的功能,拿起你离开的地方.