2013-05-08 3 views
-1

Я новичок в JavaScript с Java, и я пытаюсь реализовать функцию sleep(millis). В основном мне нужно сделать запрос к конечной точке, и если она вернет ошибку, подождите некоторое время и снова сделайте запрос ...Функция сна в Javascript

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

После небольшого исследования я нашел эту функцию here:

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

с эту функцию я достигаю именно тем, что хочу, но я понимаю, что это не может быть правильным способом, и я не нашел другого решения s нравится это ... Итак, я хотел бы узнать, по вашему мнению, следующее:

  • Совершенно действительное решение?
  • Неплохое обходное решение?
  • Просто больно для ваших глаз?
+1

Я бы предпочел использовать 'setTimeout' планировать свои пробеги, чем съедают ресурсов процессора зацикливание, как это. – NilsH

+1

Проверьте это http://stackoverflow.com/questions/951021/what-do-i-do-if-i-want-a-javascript-version-of-sleep – 999k

+1

Вы можете сделать это правильно и javascript образом. Сделайте запрос ajax конечной точке и получив ответ, обработайте его так. Если ошибка, укажите ту же функцию, что и аргумент 'setTimeout'. иначе 'clearTimeout' с вашим timeoutId. – smitrp

ответ

1

Ну, мнения будут отличаться. Я понимаю вас, хотя, JavaScript не имеет функции реального сна как Java или любом другом языке (например, Perl, Bash, PHP и т.д.)

http://devcheater.com/ показывает несколько вариантов, но также проверить эти StackOverflow темы:

What is the JavaScript version of sleep()? What's the best way to implement a sleep function JavaScript? How to make a REAL sleep() in JavaScript?

1

проблема в этом коде, который остается все время занят, пока код не закончится. Это может вызвать диалоговое окно предупреждения во многих браузерах, а также замедляет работу страницы.

The dialog

Здесь я по-прежнему предпочитают использовать функцию setTimeout. Синтаксис довольно прост:

setTimeout("codeToBeExecuted()", milliseconds); 

Вы можете упростить его, сохранив код после сна в функции, и передача необходимых данных в глобальных переменных или как это:

setTimeout('whenDone(' + numericData + ', "' + stringData + '")', milliseconds); 

JSFiddle

1

Вы говорите, что вам не нравится setTimeout, но в основном, это то, что вам нужно сделать.

function myFunc() { 
    // Do the work 
    setTimeout(myFunc, sleepInterval); 
} 

(Предполагая, что вы пытаетесь создать повторяющееся расписание, если нет, то звонить вашу другую функцию, а не myFunc снова).

Вы можете (и, вероятно, должны), конечно, добавить некоторую логику завершения.

Затем запустите свою работу с myFunc(). Вы также можете использовать setInterval, но это может вызвать некоторые проблемы, если ваши интервалы начнут перекрываться.

Что касается вашего решения, я выбираю вариант 3 ...

1

Там нет sleep функции Javascript, и вы должны рассмотреть возможность использования window.setTimeout вызвать следующую операцию. Я, конечно, не буду записывать циклы в цикле for. Но если вы должны обернуть его в функцию с именем sleep, вот пример, который даст вам представление.

function sleep(callBack, milliSecs) { 
    setTimeout(callBack, milliSecs); 
} 


function first() { 
    console.log("first"); 
} 

function second() { 
    console.log("second"); 
} 

first(); 
sleep(second, 5000); 

jsfiddle На

Смежные вопросы