Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.07.2014, 00:46
foo foo вне форума
Профессор
Отправить личное сообщение для foo Посмотреть профиль Найти все сообщения от foo
 
Регистрация: 17.05.2014
Сообщений: 197

Уродский setTimeout в node
обнаружил, что на ноде setTimeout не хочет принимать параметром строку, как в нормальных реализациях. Скорей всего с setInterval та же фигня. Пофиксил вот так:
Код:
setT=function(exp, time){return setTimeout(function(){eval(exp)}, time)}

str="console.log('foo')"
setT(str, 100)
id=setT("console.log('bar')", 100)
clearTimeout(id)
//out: foo only
Будет работать?
Ответить с цитированием
  #2 (permalink)  
Старый 06.07.2014, 01:42
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от foo
Пофиксил
Сообщение от foo
Будет работать?
так пофиксил или не пофиксил?)
Ответить с цитированием
  #3 (permalink)  
Старый 06.07.2014, 09:16
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

setTimeout НЕ должен принимать строку, просто эту возможность много где сохраняют в целях совместимости.
Ответить с цитированием
  #4 (permalink)  
Старый 06.07.2014, 09:29
foo foo вне форума
Профессор
Отправить личное сообщение для foo Посмотреть профиль Найти все сообщения от foo
 
Регистрация: 17.05.2014
Сообщений: 197

Сообщение от Erolast
НЕ должен
Почему не должен? Это нодовцы изменили стандартное поведение. Это не первый косяк который я замечаю у них.

По сабжу: мой фикс во всех случаях будет работать?
Ответить с цитированием
  #5 (permalink)  
Старый 06.07.2014, 12:18
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
Почему не должен? Это нодовцы изменили стандартное поведение. Это не первый косяк который я замечаю у них.
А, проверил, и правда, должен.
Но это не косяк. setTimeout не является частью ECMAScript, он прописан в стандарте браузерного JS W3C. То есть, в ноде никаких стандартов не нарушено - у них свои таймеры, не те, что в браузерах.

Цитата:
По сабжу: мой фикс во всех случаях будет работать?
Ну если не брать в расчет то, что ты сразу же таймаут останавливаешь, то должен, да. Но это не фикс.
Ответить с цитированием
  #6 (permalink)  
Старый 06.07.2014, 13:12
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Ну и, если уж и заниматься непотребством, то лучше так:
(function(){
  var setTimeoutOrigin = setTimeout;
  global.setTimeout = function() {
    if (typeof arguments[0] == "string")
      arguments[0] = new Function(arguments[0]);
	
    setTimeoutOrigin.apply(this, arguments);
  };
})();

setTimeout("console.log('dick')", 1000);

Последний раз редактировалось Erolast, 06.07.2014 в 13:15.
Ответить с цитированием
  #7 (permalink)  
Старый 06.07.2014, 13:17
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Что только люди не придумают, лишь бы не учить новый стандарт

setTimeout(() => console.log('dick'), 1000);
__________________
kobezzza
code monkey
Ответить с цитированием
  #8 (permalink)  
Старый 06.07.2014, 15:07
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Еще пол года до релиза(
Ответить с цитированием
  #9 (permalink)  
Старый 06.07.2014, 15:11
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от Erolast Посмотреть сообщение
Еще пол года до релиза(
Я юзаю транслятор уже больше года и всем доволен
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 06.07.2014 в 15:22.
Ответить с цитированием
  #10 (permalink)  
Старый 06.07.2014, 16:06
foo foo вне форума
Профессор
Отправить личное сообщение для foo Посмотреть профиль Найти все сообщения от foo
 
Регистрация: 17.05.2014
Сообщений: 197

Сообщение от Erolast
то лучше так:
А в чем преимущество?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какая разница между модулями DOM Level 2 и интерфейсами Node? dump Общие вопросы Javascript 3 09.08.2012 17:22
SetTimeout правильное использование nata031189 Общие вопросы Javascript 5 07.07.2012 11:32
Передача контекста через setTimeout decadent jQuery 3 10.02.2011 19:01
setTimeout как он работает??? namo86 Общие вопросы Javascript 16 02.02.2011 09:01
setTimeout в браузере IE и Opera leha66 Javascript под браузер 2 13.12.2010 13:02