Как ждать период времени после запуска функции - PullRequest
24 голосов
/ 15 ноября 2011

Если у меня есть функция, которую я хотел бы, чтобы мой js-код запускал ее немедленно, но после запуска подождите 2 секунды.Как добиться этой логики?

( Примечание: Это просто обратная логика по сравнению с setTimeout(), поскольку setTimeout() сначала ждет определенное время, а затем выполняет функцию.)

Ответы [ 7 ]

40 голосов
/ 15 ноября 2011

Просто поместите ваш код в анонимную функцию, переданную setTimeout.

например

functionToRunFirst();
setTimeout(function() {
    // rest of code here
}, 2000);
6 голосов
/ 15 ноября 2011

Я думаю, что вы ищете способ приостановить выполнение кода до истечения времени ожидания.Многие программисты-любители желают такой конструкции, но ее нет в JavaScript.Это не нужно.Для всех целей в JavaScript setTimeout и setInterval являются идеальными подходящими решениями.

Однако JavaScript - мощный язык.Вы можете создать свою собственную конструкцию для решения этой проблемы.Взгляните на сообщение в блоге Нила Микс .С его подходом вы можете создать функцию сна, которая будет использоваться по следующим направлениям (обратите внимание, что в настоящее время только Firefox поддерживает JavaScript 1.7):

function mainGeneratorFunction() {
    functionToRunFirst();
    yield sleep(2000);
    //rest of the code
}

Однако, для других браузеров не отчаивайтесь.Вы можете использовать хак, известный как XHR Sleeping.При таком подходе вы просто используете синхронный XMLHttpRequest для вызова сценария на стороне сервера, такого как php, который затем спит в течение указанного времени и возвращается после его пробуждения.Код JavaScript выглядит следующим образом:

function sleep(microseconds) {
    var request = new XMLHttpRequest();
    request.open("GET", "sleep.php?time=" + microseconds, false);
    request.send();
}

functionToRunFirst();
sleep(2000000);
//rest of the code

Функция php sleep выглядит следующим образом:

<?php
    usleep($_GET["time"]);
?>
3 голосов
/ 15 ноября 2011

использование setTimeout - это один из способов сделать это

function run() {    
    // run this code

    setTimeout(afterTwoSeconds, 2000);    
}

function afterTwoSeconds() {    
    // run this code two seconds after executing run.   
}

// call run
run();
1 голос
/ 31 марта 2015

при некотором заполнении с вашей стороны, это должно выполняться 5 раз с таймером полсекунды

var counter = 0;
var arrayOfPicture = []; //fill this out

function gifSimulator() {

    //use the counter as an index in the array, and change the image source of your element with that.


    if (counter < 5) {

        setTimeout(function () {

            counter++;

            gifSimlulator();

        }, 500); //lets wait half a second
    }
}
1 голос
/ 15 ноября 2011

Ничего плохого в ответах выше, но по-другому:

$("#somethingThatDoesntExist").fadeTo(2000, 1, function() {
    // two seconds later
});
1 голос
/ 15 ноября 2011

что означает «ждать 2 секунды»? Вы имеете в виду, что хотите заблокировать возврат из функции на 2 секунды?

Если так, ты не сможешь этого сделать. в JavaScript нет функции sleep ().

вам просто нужно использовать setTimeout ()

0 голосов
/ 29 апреля 2015

Я не знаю, почему вы, ребята, так много делаете. Я считаю, что мы можем сделать это с помощью объекта Date. Сначала возьмите значение даты и используйте функцию setInterval, чтобы подождать, пока мы не получим указанный интервал (получите новую дату и проверьте разницу). Как только мы получим это, сбросим функцию интервала и продолжим работу с вашим кодом, после чего он сможет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...