node.js setImmediate unexpected behavior -


as understand, differences between process.nexttick() , setimmediate() followings:

  1. callbacks scheduled process.nexttick() executed before entering next event loop, while callbacks scheduled setimmediate() executed 1 per event loop.
  2. base on characteristics stated above, can said that: recursive call of process.nexttick() can cause program hang up, while recursive call of setimmediate() not.

then i've written testing code verify statements above, here code:

process.nexttick(function() {     console.log('nexttick1'); });  process.nexttick(function() {     console.log('nexttick2'); });  setimmediate(function() {     console.log('setimmediate1');     process.nexttick(function() {         console.log('nexttick3');     }); });  setimmediate(function() {     console.log('setimmediate2'); }); 

my expected result should

nexttick1, nexttick2, setimmediate1, nexttick3, setimmediate2

, got

nexttick1, nexttick2, setimmediate1, setimmedate2, nexttick3

then i've run test study behavior of setimmediate():

//the following code using express framework app.get('/test', function (req, res) {     res.end('the server responding.'); });  app.get('/nexttick', function (req, res) {     function callback() {         process.nexttick(callback);     }     callback();     res.end('nexttick'); });  app.get('/setimmediate', function (req, res) {     function callback() {         setimmediate(callback);     }     callback();     res.end('setimmediate'); }); 

step1: accessed http://localhost:3000/nexttick on browser , got text nexttick.

step2: accessed http://localhost:3000/test test if server still responding requests, , didn't response, browser kept waiting response. nothing surprising because recursive call of process.nexttick() had hanged server.

step3: restarted server.

step4: accessed http://localhost:3000/setimmediate , got text setimmediate

step5: accessed http://localhost:3000/test again test if server still responding. , result same step2, didn't response , browser kept waiting response.

this means behavior of process.nexttick() , setimmediate() pretty same know not.

i wondering why happening or have misunderstood sth. thank you.

p.s. running node v0.12.7 under windows 10.

actually test results looks ok (i refer first test). comments "setimmediate() executed 1 per event loop." wrong, see https://nodejs.org/api/timers.html#timers_setimmediate_callback_arg , thats reason don't understand first test results.

basically process.nexttick put function @ end of current event loop while setimmediate put @ next event loop.

but executing multiple setimmediate ok , go same next event loop.

in

setimmediate(function() {     console.log('setimmediate1');     process.nexttick(function() {         console.log('nexttick3');     }); });  setimmediate(function() {     console.log('setimmediate2'); }); 

basically have put 2 function sthat invoked in next event loop, , in 1 of them put nexttick invoked @ end of same cycle @ end of same cycle. first invoke 2 setimmediate , nexttick called in first.


Comments