Javascript Как мне подождать x секунд перед запуском следующей строки кода?

Я хотел бы иметь возможность сделать что-то похожее на это:

function testFunction() {
    alert("Test");
}

if (x > y) {
    wait(z);
    testFunction();
}

Спасибо!


person Abishek Roka    schedule 25.10.2017    source источник
comment
Вы пытались поместить часть исходного кода в setTimeout? setTimeout(function(){ //this will run after 3 seconds}, 3000); Если бы вы могли более четко задать свой вопрос и сказать, какой раздел вы хотите подождать или почему кому-то может быть проще дать вам четкий ответ.   -  person NewToJS    schedule 26.10.2017
comment
@NewToJS прав! Также вы можете взглянуть на этот аналогичный вопрос stackoverflow.com/questions/14226803/   -  person lmoglia    schedule 31.03.2021


Ответы (3)


Теперь это можно сделать с обещаниями:

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

async function demo() {
  console.log('Taking a break...');
  await sleep(2000);
  console.log('Two second later');
}

demo();
person IAmCoder    schedule 25.10.2017
comment
Важно отметить, что для этого требуется поддержка es6. - person Shawn J. Molloy; 05.07.2018

Пожалуйста, попробуйте использовать функцию setTimeout:

setTimeout(function(){ alert("Hello"); }, 3000);

Из этой ссылки:

https://www.w3schools.com/jsref/met_win_settimeout.asp

Итак, для вашего конкретного случая использования:

var timeToWait = 3000; // in miliseconds.
function testFunction() {
    alert("Test");
 }

 if (x > y) {
      setTimeout(function(){ testFunction(); }, timeToWait);
  }

Надеюсь, это поможет.

person Shawn J. Molloy    schedule 25.10.2017

Вы должны поместить свой код в функцию обратного вызова, которую вы предоставляете для setTimeout:

function stateChange(newState) {
    setTimeout(function () {
        if (newState == -1) {
            alert('VIDEO HAS STOPPED');
        }
    }, 5000);
}

Из этого вопроса: Javascript - подождите 5 секунд перед выполнением следующей строки

person prgrm    schedule 25.10.2017