You won't catch me suggesting streamline isn't a good idea, since the sublimetext snippets I'm using can be thought of as a crude implementation of streamline. What I prefer about them is that I don't have to integrate any preprocessors into my workflow for front or back-end code.
On Tue, Sep 23, 2014 at 7:29 AM, Alexey Petrushin <[email protected]> wrote: > Ha-ha, very good example, compare this async version it with the sync > version below, and tell me that there's no problem with > callbacks """if you know how to deal with it""" :D > > Not saying that in even such a simple code it's extremely > easy to make small errors like missing `else` statements etc. > > Also it doesn't preserve the call stack - so when you see error in console > you would have no context and no idea what happened... > And it still doesn't catch the sync errors... > And some of callbacks can be fired twice... > And with streams there are lots of events fired and should be properly > handled... > > And still many insist that it is "not a problem". > > CDN.use(config.CDN.baseUrl, function(req, res, next) { > if(err) return next(err); > async.waterfall([ > function (cb) { > fs.lstat(config.base+"/cdn"+req.url, cb); > }, > function (stats, cb) { > if(stats.isSymbolicLink()) { > async.waterfall([ > function (cb) { > fs.readlink(config.base+"/cdn"+req.url, cb); > }, > function (linkstr, cb) { > log.info("Redirecting request \""+req.url+"\" to > \""+linkstr); > fs.readFile(linkstr, cb); > }, > ], cb); > } > } > ], function (err, data) { > if (err) return next(err); > res.writeHead(200,{"Content-type":"text/html"}); > res.end(data); > }); > }); > > Sync version. > > CDN.use(config.CDN.baseUrl, function(req, res, next) { > var stats = fs.lstat(config.base+"/cdn"+req.url) > if(stats.isSymbolicLink()) { > var linkstr = fs.readlink(config.base+"/cdn"+req.url); > log.info("Redirecting request \""+req.url+"\" to \""+linkstr); > var data = fs.readFile(linkstr); > res.writeHead(200,{"Content-type":"text/html"}); > res.end(data); > } > }); > > On Monday, 22 September 2014 05:18:40 UTC+4, Matt Sergeant wrote: >> >> >> On Sat, Sep 20, 2014 at 9:17 AM, Bruno Jouhier <[email protected]> wrote: >>> >>> How do you implement it with async? >> >> >> This is a good question, so here's an example translation (not the only >> way to do it): >> >> >> CDN.use(config.CDN.baseUrl, function(req, res, next) { >> if(err) return next(err); >> async.waterfall([ >> function (cb) { >> fs.lstat(config.base+"/cdn"+req.url, cb); >> }, >> function (stats, cb) { >> if(stats.isSymbolicLink()) { >> async.waterfall([ >> function (cb) { >> fs.readlink(config.base+"/cdn"+req.url, cb); >> }, >> function (linkstr, cb) { >> log.info("Redirecting request \""+req.url+"\" >> to \""+linkstr); >> fs.readFile(linkstr, cb); >> }, >> ], cb); >> } >> } >> ], function (err, data) { >> if (err) return next(err); >> res.writeHead(200,{"Content-type":"text/html"}); >> res.end(data); >> }); >> }); >> >> It's more code, but it improves the error checking. If it didn't have that >> "if" statement in there it would be a lot simpler - async code doesn't deal >> well with "if" statements I've found (there's no way to short-circuit). >> >> Matt. > > -- > Job board: http://jobs.nodejs.org/ > New group rules: > https://gist.github.com/othiym23/9886289#file-moderation-policy-md > Old group rules: > https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines > --- > You received this message because you are subscribed to a topic in the > Google Groups "nodejs" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/nodejs/wBAJhYOzjqQ/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > [email protected]. > To post to this group, send email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/nodejs/36905e32-1293-4ea3-b2d8-7015509afa31%40googlegroups.com. > > For more options, visit https://groups.google.com/d/optout. -- THOMAS BOUTELL, DEV & OPS P'UNK AVENUE | (215) 755-1330 | punkave.com -- Job board: http://jobs.nodejs.org/ New group rules: https://gist.github.com/othiym23/9886289#file-moderation-policy-md Old group rules: 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 unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/nodejs/CAORXhGKRLXzzS4PLPCvgC1FTOGygYWC7awkiDSNdyncSywHMMw%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
