В JS нет метода сна. Если вы хотите спятить, вы должны определить метод самостоятельно.
Функция Sleep (numbermillis) {var now = new Date (); var evittime = now.gettime () + numbermillis; while (true) {теперь = new date (); if (now.gettime ()> exittime) return; }}Ниже приведены дополнения:
В дополнение к повествованию JS, JWAC (JavaScript с расширенной поддержкой продолжения) также привержена тому, чтобы избежать написания функций обратного вызова, которые неприятны, асинхронно вызванным путем расширения синтаксиса JavaScript. Сон реализован с помощью JWAC, код выглядит следующим образом:
Кода -копия выглядит следующим образом:
Функция Sleep (msec) {
var k = function_continuation;
settimeout (function () {resume k <- mesc;}, msec);
приостановить;
}
Этот синтаксис еще более страшный, и это название метода потока, которое не рекомендуется в Java. Честно говоря, я склонен к повествованию JS.
Как и повествование JS, JWAC также должны быть предварительно компилированы, а предварительный компилятор написан на языке LISP. Это также альфа -версия на данный момент. Для получения дополнительных представлений и сравнений двух, пожалуйста, обратитесь к новой статье о SitePoint: Устранение асинхронных обратных вызовов JavaScript путем предварительной обработки
При написании сложных сценариев JavaScript иногда необходимо надеяться, что сценарий может остановиться в течение определенного периода времени, аналогично эффекту, достигнутому потоком.
Как мы все знаем, JavaScript не предоставляет функции управления потоком, похожие на Java. Хотя есть два метода, SetTimeout и SetInterval, которые могут выполнить некоторый контроль выполнения, они не могут удовлетворить все требования. Всегда было много людей, которые спрашивали, как реализовать сон/паузу/подождать в JavaScript, и действительно есть некоторые очень хромые решения:
Самый простой и худший способ - написать цикл, код может быть следующим:
Кода -копия выглядит следующим образом:
Функция Sleep (numbermillis) {
var теперь = new Date ();
var evittime = now.gettime () + numbermillis;
while (true) {
Теперь = новая дата ();
if (now.gettime ()> exittime)
возвращаться;
}
}
Приведенный выше код на самом деле не спит интерпретатора скрипта, а также приводит к быстрому увеличению процессора до высокой нагрузки. Браузер будет даже в поддельном состоянии смерти в течение того периода времени.
Во -вторых, умные люди используют реализацию специального диалогового окна IE для подключения друг к другу. Код может быть следующим:
Кода -копия выглядит следующим образом:
Функциональный сон (тайм -аут) {
window.showmodaldialog ("javascript: document.writeln ('<script> window.settimeout (function () {window.close ();}," + timeout + "); <// script>');");
} window.alert ("До сна ...");
Сон (2000);
window.alert ("После сна ...");
Само собой разумеется, только IE поддерживает (IE7 не может достичь своей цели из -за ограничений безопасности).
Кроме того, существуют также такие хитрости, как использование апплета или вызов Windows Script Host's wscript.sleep (), которые являются последними курортами.
Наконец, есть более умные люди, которые разработали, пожалуй, лучшее решение. Давайте сначала посмотрим на код:
Кода -копия выглядит следующим образом:
Функциональный сон (миллисы) {
var natifier = njsruntime.createNotifier ();
SetTimeout (уведомление, миллисы);
уведомлятель.wait-> ();
}
Правильно, видя синтаксис -> () удивительно, как видение функции прототипа $ (). Тем не менее, этот скрипт сообщит о ошибках синтаксиса непосредственно в браузере. Фактически, они должны быть предварительно считываются в JavaScript, утвержденный клиентским браузером. Скомпилированный сценарий выглядит следующим образом:
Кода -копия выглядит следующим образом:
Функциональный сон (миллисы) {
var njf1 = njen (это, аргументы, "миллисы");
Нью -Джерси: пока (1) {
try {switch (njf1.cp) {
case 0: njf1._notifier = njsruntime.createNotifier ();
setTimeout (njf1._notifier, njf1._millis);
njf1.cp = 1;
njf1._notifier.wait (njf1);
возвращаться;
Случай 1: разорвать Нью -Джерси;
}} catch (ex) {
if (! njf1.xcept (ex, 1))
возвращаться;
}}
njf1.pf ();
}
Я не могу этого понять, и я больше не хочу этого понимать. Все эти задачи будут реализованы с помощью повествовательного JavaScript - расширения JS, которое обеспечивает для нас асинхронную функциональность блокировки. Нам нужно только писать синтаксис Weird -> () до, а затем реализовать эффект сна посредством достатической компиляции или динамического компиляции переднего плана.
Повествование JavaScript утверждает, что освободит вас от головокружительных функций обратного вызова и писать четкие долговые задачи. В настоящее время это все еще версия Alpha, и на странице примеров есть пример кнопки перемещения. Загрузка исходного кода также доступна на домашней странице. С моими слабыми базовыми знаниями я едва могу видеть, что реализация государственной машины моделируется в коде. Я надеюсь, что друзья, которые опытны в алгоритмах, могут проанализировать это для нас.
Наконец, у меня всегда была моя точка зрения: пожалуйста, держите JavaScript простым, если это не необходимо. Прежде чем JavaScript сможет обеспечить нативную поддержку потоков, возможно, мы можем изменить дизайн, чтобы избежать асинхронных приложений блокировки.
Извилистая реализация ошибок
<тип сценария "Text/JavaScript">/*Реализация функции паузы в самих JavaScript JavaScript не имеет функции паузы (Sleep не может быть использован) одновременно VBScript не может использовать doevents, поэтому напишите эту функцию для реализации этой функции. JavaScript - это слабый язык объектов, и функция также может использоваться в качестве объекта. Например: [code] function test () {alert ("hellow"); this.nextstep = function () {alert ("nextstep"); }} Мы можем вызвать var myTest = new Test (); mytest.nextstep (); Когда мы делаем паузу, функцию можно разделить на две части, неизменную перед операцией паузы, и поместить код для выполнения после паузы в этом.nextstep. Чтобы контролировать паузу и продолжение, нам нужно написать две функции для реализации функций паузы и продолжения соответственно. Функция паузы выглядит следующим образом: */Функция пауза (obj, iminsecond) {if (window.eventlist == null) window.eventlist = new Array (); var ind = -1; for (var i = 0; i <window.eventlist.length; i ++) {if (window.eventlist [i] = null) {window.eventlist [i] = obj; ind = i; перерыв; }} if (ind ==-1) {ind = window.eventlist.length; window.eventlist [ind] = obj; } setTimeout ("goon (" + ind + ")", 1000);}/*Эта функция помещает функцию, которая будет приостановлена в windows aventlist, и в то же время вызывает продолжающуюся функцию через SetTimeout. Продолжающаяся функция заключается в следующем: */function goon (ind) {var obj = window.eventlist [ind]; window.eventlist [ind] = null; if (obj.nextstep) obj.nextstep (); else obj ();}/*Эта функция вызывает метод Nextstep подвесной функции. Если этот метод недоступен, функция будет вызвана снова. После написания функции мы можем написать следующий том: */function test () {alert ("hellow"); Pause (this, 1000); // вызов функции паузы this.nextstep = function () {alert ("nextstep"); }} </script>