JS延迟脚本无法运行

时间:2019-05-22 15:15:43

标签: javascript settimeout delay delayed-execution

我知道我可以使用setTimeout,但是我的软件有一些限制,因此我必须使用一种解决方法。我在网上找到了应该用作延迟功能的

function sleep(milliseconds) {
 var start = new Date().getTime();
 for (var i = 0; i < 1e7; i++) {
   if ((new Date().getTime() - start) > milliseconds){
 break;
}
}
}

因为我不是Js的新手,所以我不知道如何调用此函数。我正在尝试做这样的事情:

sleep(2000) {
...
}

但是以上操作无效。有人可以告诉我如何运行该功能。谢谢。

请注意,我的问题有所不同,因为我无法使用setTimeout函数。

3 个答案:

答案 0 :(得分:0)

只需执行以下操作:

WebRequest.AuthenticationLevel

该函数旨在使脚本运行X毫秒,然后函数完成,脚本继续运行。您要在sleep函数之后运行的任何代码都必须位于下一行。

此外,您不必这样做,但这是格式正确的代码:

sleep(2000);

答案 1 :(得分:0)

该功能看起来不太好。我建议使用promise和.then():

function sleep(time) {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve()
    }, time)
  }
}

您可以这样调用此函数:

await sleep(2000)

sleep(2000).then(() => {
  // rest of code
})

无奈 ,回到您的问题,您将像这样调用函数:

sleep(2000)
// rest of code

答案 2 :(得分:0)

您可以使用requestAnimationFrame来模拟。

function sleep(milliseconds, callback) {
    requestAnimationFrame(function() {
        var start = performance.now();

        for (var i = 0; i < 1e7; i++) {
            if ((performance.now() - start) > milliseconds) {
                return callback();
            }
        } 
    })
}

您会这样称呼它:

console.log(1);
sleep(2000, () => console.log(3));
console.log(2);

function sleep(milliseconds, callback) {
  requestAnimationFrame(function() {
    var start = performance.now();

    for (var i = 0; i < 1e7; i++) {
      if ((performance.now() - start) > milliseconds) {
        return callback();
      }
    }
  })
}

console.log(1);
sleep(2000, () => console.log(3));
console.log(2);