2015-09-30 3 views
-2

Например, когда я пишу в node.js REPL в терминале:SetTimeout (номер) вызывают нарушение node.js REPL

setTimeout(3); 

он показывает мне эту ошибку:

timers.js:110 
    first._onTimeout(); 
     ^
TypeError: Property '_onTimeout' of object [object Object] is not a function 
    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15) 

но, что Интересно, что он разбивает весь сеанс (вместо этого просто бросает ошибку).

Почему это происходит?

Спасибо.

PS: Я знаю, что я должен добавить функцию в качестве первого параметра. Просто хотел узнать, почему он прерывает сеанс.

+0

Я не могу воспроизвести проблему. Сеанс работает нормально после того, как я выбрал ошибку. – Quentin

+0

проверить это: http://postimg.org/image/qxwdv5qsr/full/ –

ответ

0

При использовании setTimeout или setImmediate, он добавляет ваш callback к в очереди событий, так как узел не может гарантировать, что ваш обратный вызов будет срабатывать именно в n. Поскольку 3 не является функцией, которую он не запускает, возникает исключение и завершается до того, как он будет возвращен в область выполнения, поэтому он убьет REPL.

Теперь это отличается от запроса обратного вызова и возникновения ошибки, поскольку обратный вызов будет определен в области выполнения вызывающего сценария. Если ваш обратный вызов представляет ошибку, это приведет к возникновению исключения в правильной области. Обратите внимание, что Node не поддерживает строку для аргумента callback, как это делает большинство браузеров.

Для такого низкого тайм-аута вам лучше использовать process.nextTick(callback), что намного лучше для перфоратора и безопасности, но вы все равно увидите ошибку, поднятую на верхнем уровне.

0

Вы должны использовать

setTimeout(function() { 
    console.log('This runs every minute'); 
    }, 60000); 

Как сказал Дэйв, SetTimeout ожидает функции. http://www.w3schools.com/jsref/met_win_settimeout.asp

+0

Я знаю, просто хотел узнать, почему он прерывает сеанс вместо того, чтобы просто возвращать ошибку. –

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

  • Нет связанных вопросов^_^