2016-06-23 3 views
1

документа nodejs сказатьразницы между `` setTimeout` и setImmediate`

Расписания «немедленно» выполнение обратного вызова после обратного вызова I/O событий и до таймеров, установленных SetTimeout и setInterval срабатывает. Возвращает непосредственный объект для возможного использования с clearImmediate.

, но я пишу тестовый код следующим образом:

server = http.createServer((req, res)-> 
    res.end() 
) 

setImmediate(()-> 
    console.log 'setImmediate' 
) 

setTimeout(()-> 
    console.log 'setTimeout' 
, 0) 
process.nextTick(()-> 
    console.log 'nextTick' 
) 

server.listen(8280,()-> 
    console.log 'i/o event' 
) 

почему setTimeout всегда выходной befeore setImmediate

+0

Отметьте [это] (https://github.com/nodejs/node-v0.x-archive/issues/25788#issuecomment-128869483). – robertklep

ответ

2

Возможный дубликат NodeJS - setTimeout(fn,0) vs setImmediate(fn)

SetTimeout - Этот тип функции будет вызов после установленного времени, который равен 0 в вашем случае, но он следует за циклом событий. И цикл событий не предоставляет, чтобы он работал через 0 секунд. Фактически это только гарантирует, что функция будет вызываться после завершения заданного времени.

Но функция может быть вызвана в любое время после завершения времени, когда очередь событий узел волен взять функцию обратного вызова

Источник понять цикл событий - https://www.youtube.com/watch?v=8aGhZQkoFbQ

SetImmediate - Это будет вызвана, как и когда он переходит в стек и не соответствует циклу обратного вызова в цикле событий.

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