2013-03-11 2 views
1

настоящее время я использую следующую функцию в очередь вызов функции в цикле обработки событий:Какова функция, выполняемая вызовом setTimeout?

Function.prototype.async = function() { 
    setTimeout.bind(null, this, 0).apply(null, arguments); 
}; 

Это позволяет мне писать код, как это:

alert.async("This will be displayed later."); 
alert("This will be displayed first."); 

Теперь я планирую включить эту функцию в библиотеке, которую я пишу. Однако имя async кажется неточным описанием функции. Технически функция не выполняется асинхронно.

Итак, мой вопрос в том, что если функция, выполняемая setTimeout, не является асинхронной, то что это такое? Как бы вы это описали?

Я считаю, что defer было бы более подходящим названием, но я не уверен.

+3

я бы, вероятно, использовать 'defer' тоже. – Rob

+1

'process.nextTick()': P – Chad

+0

Затем назовите их общим именем, как «обратный вызов» или «обработчик» – Joseph

ответ

2

Код ECMAscript выполняется в так называемом пользовательском интерфейсе, который работает в любой реализации браузера. В основном, все обновления и Блоки кода Javascript являются общими для этого потока (это также причина того, почему длительный Javascript-код повесит интерфейс браузеров).

Однако, что setTimeout делает, это просто в очередь вставки вашей функции в этот UI нить. Это, в свою очередь, означает, что нет гарантии, что ваш код действительно будет выполнен в xxx miliseconds, просто чтобы он попал в очередь. Если другие процессы все еще запущены или браузер занят в потоке, он не будет выполняться, пока ничего не будет обработано.

Как бы это назвать?

«Отсрочка исполнения ECMAscript коды»

+0

Я думаю, что мои слова стали более техничными, я не знал об этом много деталей, просто концептуальных знаний, спасибо Энди :) – MarmiK

0

исполняющие после первого вызова в течение (спина к спине),

И переплетен с помощью set-timeout, чтобы начать после первого события более.

Так что синхронные (Регистрация/в потоке),

Я надеюсь, что имеет смысл здесь :)

+1

К сожалению, это не асинхронно. Он блокирует, он просто блокируется позже. Это называется «отложенным», а не «асинхронным» – Chad

+0

Простите, но я потерял попытку расшифровать значение ваших предложений MarmiK. Не могли бы вы быть более ясными в том, что вы пытаетесь передать? Эй, это рифмуется!= D –

+0

, и если данные/событие объединяются после первого события, технически вы также правы, поскольку это задержка первого события, , но оно задерживается для присоединения к событию после первого события (так что цель задержки чтобы сделать его асинхронным. Я не хочу выигрывать здесь. – MarmiK

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