js sleep 1 sec

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

В самом Javascript такой функции нет, но можно что-нибудь придумать с её реализацией.

Реализация Javascript sleep, способ 1

Итак, можно использовать способ 1, и вызывать функцию которая будет выполняться заданное количество милисекунд, и после её выполнения код перейдет к следующему шагу. Эта функция достаточно жадная, и её суть должна заключаться в том, что она «крутить» цикл до тех пор, пока не наступит нужное время.

То есть описанная выше функция на Javascript sleep получает текущее время, и потом начинает выполнять цикл do .. while до тех пор, пока разница между первым полученным временем (при запуске функции) и текущим временем (на момент каждой итерации цикла) будет меньше, чем заданное количество милисекунд (ms).

Всё конечно здорово, но это как пользоваться копьем и бумерангом в эпоху бластеров и космических путешествий (в общем не очень удачный и современный пример).

Функция на Javascript sleep, способ 2

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

По сути это равносильно вызову в код функции setTimeout, но обернуто в красивую функцию sleep. И в отличае от первого способа, на самом деле это не затормозит выполнение кода, а просто отложит выполнение вашей функции (другие функции продолжат работать). С одной стороны это хорошо, так как не так сильно «жадничает», а с другой стороны истинной sleep не получается.

Надеюсь, примеры реализации функции на Javascript sleep вам помогут, но будьте осторожны, использование sleep в коде крайне не рекомендуется (разве что это какая-то игра или специальная учебная программа), в реальной жизни в большинстве случаев javascript sleep — лишь испортит впечатление об использовании программы/сайта/интерфейса, из-за задержек в отклике на действия пользователя.

Нужна функция sleep, наподобие как в других языках, в javascript. Чтобы останавливала остальной код до загрузки кое-каких данных.

Особенности национальных форумов: в америке ответят, в европе пошлют, а в россии объяснят, почему ты дурак (анекдот). К чему это?

Не надо мне рассказывать про setTimeout и setInterval. Они здесь не подходят. Мне конкретно нужно возвратить из функции данные, которые ещё не пришли. Return-ом. Не коллбэком. Задержка совсем маленькая,

6 мс, так что неудобств не будет. Бесконечный цикл не подходит.

Есть ли лучший способ создать sleep в JavaScript, чем следующая функция pausecomp ( взято отсюда )?

Это не дубликат Sleep in JavaScript — задержка между действиями ; Мне нужен реальный сон в середине функции, а не задержка перед выполнением фрагмента кода.

68 ответов

2017 год & mdash; Обновление 2019 года

С 2009 года, когда был задан этот вопрос, JavaScript значительно эволюционировал. Все остальные ответы сейчас устарели или слишком сложны. Вот текущая лучшая практика:

Вот и все. await sleep( ) . [+1129]

Обратите внимание, что

  1. await может выполняться только в функциях с префиксом с ключевым словом async или на верхнем уровне вашего сценария в некоторых средах ( например, консоль Chrome DevTools или Runkit).
  2. await только приостанавливает текущую функцию async

Две новые функции JavaScript помогли написать эту функцию «сна»:

  • Promises, a Нативная особенность ES2015 (он же ES6). Мы также используем функции стрелок в определении функции сна.
  • Функция async/await позволяет коду явно ожидать обещание выполнить (разрешить или отклонить).

Совместимость

  • обещания поддерживаются в Node v0.12 + и и широко поддерживаются в браузерах , кроме IE
  • ] async / await приземлился в V8 и был включен по умолчанию после Chrome 55 (выпущен в декабре 2016 года)
    • он приземлился в узле 7 в октябре 2016 года
    • , а также приземлился в Firefox Nightly в ноябре 2016 года

Если по какой-то странной причине вы используете Node старше чем 7 (который достиг конца срока службы ) или нацелены на старые браузеры, async / await все еще можно использовать через Babel (инструмент, который будет переносить JavaScript + новые функции в простой старый JavaScript), с плагином transform-async-to-generator .

Я использую многопоточный HTML5 Worker, который сможет прервать синхронный запрос XMLHttpRequest, указывающий на не отвечающий URL. Это не блокирует браузер.

Существует новая библиотека, которая аккуратно объединяет функции вместе с таймаутами, чтобы вы могли избежать ада обратного вызова.

И имеет встроенную поддержку для петель что «спит» между каждой итерации.

Вы можете использовать закрывающий вызов setTimeout () с постепенно увеличивающимися значениями.

Если вы хотите перевести анонимную функцию, например, созданную вами в качестве обработчика, я рекомендую следующее:

Этот код говорит: «Если условие ожидания еще не выполнено, вызовите эта функция снова с этими аргументами. » Я использовал этот метод для передачи одних и тех же аргументов моим обработчикам, что фактически делает этот код незапрашивающим sleep () (который работает только в начале вашей функции).

убедитесь, что ваша вызывающая функция асинхронная

проверена и работает нормально

В Livescript (который компилируется в Javascript) вы можете сделать следующее:

Функции JavaScript не допускают приостановки. С синхронными Javascript-процедурами реализованы. Процедуры ожидают операций ввода-вывода и времени ожидания. Доступно для JavaScript 1.7.

Я предпочитаю эту функциональную функцию sleep :

Это поможет вам.

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

. В этом примере генератор называть его собственным next() , поэтому, как только он уйдет, он сам по себе.

Теперь также возможно использовать собственный модуль util для обещания регулярных функций синхронизации.

Другой возможный способ:

Проблема с использованием реальной функции сна состоит в том, что JavaScript является однопоточным, и функция сна в значительной степени заставит ваш браузер зависать в течение этого времени.

Я получил Promise — не конструктор, использующий верхний ответ. Если вы импортируете Bluebird, вы можете сделать это. Простейшее решение ИМО.

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

Каждое решение, которое я до сих пор читал, было бы похоже на «давай спать и посмотрим, что случилось завтра».

setInterval (обратный вызов, время) будет долго ждать, а затем обратный вызов, в то время как блокировка времени выполнения. Текущая реализация «setInterval» далека от сохранения потока, даже не говоря уже о параллелизме.

Хотя упомянутые разреженные решения выглядят как, угадайте, что C # ( смеется ), они все еще не работают, как в C # / .NET. Они все еще работают как в C.

В настоящее время JavaScript НЕ предоставляет архитектуру для реализации реальной многопоточности. Лучшим подходом был бы TypeScript, но все же в нем так мало реального решения, что . больно. JavaScript, JQuery, AJAX, JNode и даже TypeScript — это всего лишь группа Wannabes, полагающихся на благо и плохое настроение разработчиков. Факт. Полная остановка.

Оцените статью
SoftLast
Добавить комментарий