The moment you use red.end() or res.render() data is being sent to the client and the connection is closed afterwards. Whatever you do after that point does not increase the time the request takes for the client*. Thus all of your suggestions are fine and don't really make any difference.
*: Unless you perform blocking operations, like complex computing or fs.*Sync shenanigans in the same tick. If you must, do that in the following event iteration using process.nextTick or in a child process, but, well, you should not block node anyways. The setTimeout approach though is both unnecessary and performs worse than process.nextTick - don't use it unless you really need to wait a specific time. On Thursday, February 21, 2013 7:08:56 AM UTC+1, [email protected] wrote: > > Great Node.js!! I do love it. > Not sure if I can post question here. Apologized if I am wrong. > > I am wondering how can I finish the request and do something time > consuming, e.g. email/file conversion...etc. > I've tried the following four ways, but all of them take long time to > return the response in browser. > Is there any way I can do something after the request is finished? Just > like PHP FPM *fastcgi_finish_request()* in Express Project? > > #1 Use res.render callback > > function(req, res){ > > res.render('someview', function(err, html){ > > if (err){ console.log('debug-err:', err); > res.send(html); > var result = 1; > for (var i = 0, j = 10; i < 10000000000; i++){ > result = result + i + j; > } > console.log('debug',result); > }); > } > > > #2 Use setTimeout: > > function(req, res){ > > res.render('someview'); > > setTimeout(function(){ > var result = 1; > for (var i = 0, j = 10; i < 10000000000; i++){ > result = result + i + j; > } > console.log('debug',result); > }, 0); > } > > > #3 Use process.nextTick: > > function(req, res){ > > res.render('someview'); > > process.nextTick(function(){ > var result = 1; > for (var i = 0, j = 10; i < 10000000000; i++){ > result = result + i + j; > } > console.log('debug',result); > }); > } > > #4 Simply do it, because res.render won't block the I/O > > function(req, res){ > > res.render('someview'); > > var result = 1; > for (var i = 0, j = 10; i < 10000000000; i++){ > result = result + i + j; > } > console.log('debug',result); > } > > Appreciated for any explanation for understanding Node.js event I/O. Thank > you very much :) > -- -- Job Board: http://jobs.nodejs.org/ Posting guidelines: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines You received this message because you are subscribed to the Google Groups "nodejs" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/nodejs?hl=en?hl=en --- You received this message because you are subscribed to the Google Groups "nodejs" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.
