2013-01-14 5 views
3

Возможные Дублировать:
Sleep in Javascript
What do I do if I want a JavaScript version of sleep()?Python во время преобразования цикла в Javascript

Как преобразовать следующее:

while True: 
    # do something 
    time.sleep(2) 

в JavaScript?

+0

Http: // stacko verflow.com/questions/951021/what-do-i-do-if-i-want-a-javascript-version-of-sleep – l4mpi

+1

Подумайте, что это делает в Python: вся программа просто сидит и ничего не делает ты «спишь». Если вы сделали то же самое в JS, браузер (или сервер node.js) также будет сидеть и ничего не делать, что плохо, потому что вы обычно хотите, чтобы, скажем, прокручивать страницу или нажимать на ссылки (или обрабатывать подключения других пользователей). – abarnert

+0

@abarnert - спасибо, что указали это. Я пытаюсь создать индикатор выполнения, который будет «обновлять» каждые две секунды вызовом ajax для получения прогресса из базы данных. Как бы вы предложили мне это сделать? – David542

ответ

10

Вы бы этого не сделали, поскольку JavaScript не спит - он синхронный и основан на событиях. Тем не менее, вы можете планировать функции, которые должны выполняться позже во времени через setTimeout и setInterval:

var timerid = setInterval(function() { 
    // do something 
    // instead of "break", you'd use "clearTimeout(timerid)" 
}, 2000); 

Для вашего AJAX прогресс-бар, я бы рекомендовал следующее, не сгореть запросы строго каждый 2s, но ждет для их возвращения:

function getUpdate() { 
    myAjax(…, function onAjaxSuccess(result) { // an async event as well 
     // show(result) 
     if (!result.end) 
      setTimeout(getUpdate, 2000); 
    }); 
} 
getUpdate(); 
+0

«это синхронно и основано на событиях» - под этим вы подразумеваете _a_синхронный, не так ли? –

+1

@Brian: Скажем, «В каждом асинхронном событии происходит синхронное однопоточное выполнение» – Bergi

+0

+1. Но стоит упомянуть, что если «сделать что-то» занимает, скажем, 1 секунду, «setInterval» может вызывать его в 0, 2, 4, 8, 10, ... секунды, тогда как код Python OP будет работать на 0, 3 , 6, 9, 12, ... секунд. (Для этого вы можете использовать 'setTimeout' и запланировать новый' setTimeout' в конце обратного вызова.) – abarnert

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