JS Delay Script от запуска - PullRequest
0 голосов
/ 22 мая 2019

Я знаю, что могу использовать 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 голосов
/ 22 мая 2019

Эта функция не выглядит великолепно.Я бы порекомендовал использовать обещание и .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
0 голосов
/ 22 мая 2019

Вы можете использовать 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);
0 голосов
/ 22 мая 2019

Просто сделайте следующее:

sleep(2000);

Функция предназначена для того, чтобы сценарий выполнял функцию в течение X миллисекунд, затем функция завершается и сценарий продолжает выполняться. Любой код, который вы хотите запустить после функции сна, просто должен находиться на следующей строке.

Кроме того, вам не нужно делать это , но вот код, отформатированный правильно:

function sleep(milliseconds) {
    var start = new Date().getTime();

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