Instead of nesting functions within function, use a state object and named functions:
function printCommentsForUser(login, password, done) {
var s = {};
authenticateUser(login, password, authenticated);
function authenticated(err, user) {
if (err) { return done(err); }
s.user = user;
getComments(s.user.id, gotComments);
}
function gotComments(err, comments) {
if (err) { return done(err); }
renderComments(s.user, comments, done);
s = null;
}
}
Reads much nicer even if it is more lines of code.
Tim
On Mon, Sep 15, 2014 at 01:20:05PM -0700, Alexey Petrushin wrote:
> I wrote short article http://jslang.info/blog/2014/escape-from-callback-hell
>
> about simple approach that turn this
>
> var printCommentsForUser = function(login, password, cb){
> authenticateUser(login, password, function(err, user){
> if(err) return cb(err)
> getComments(user.id, function(err, comments){
> if(err) return cb(err)
> renderComments(user, comments, cb)
> })
> })
> }
>
> Into this
>
> var printCommentsForUserWithFork = function(login, password, ecb, cb){
> authenticateUser(login, password, ecb, function(user){
> getComments(user.id, ecb, function(comments){
> renderComments(user, comments, ecb, cb)
> })
> })
> }
>
> Or this
>
> var printCommentsForUserWithTwoCallbacks = function(login, password,
> ecb, cb){
> authenticateUser(login, password, ecb, function(user){
> getComments(user.id, ecb, function(comments){
> renderComments(user, comments, ecb, cb)
> })
> })
> }
>
> On Monday, 15 September 2014 20:28:28 UTC+4, Ingwie Phoenix wrote:
> >
> > Hai, everyone.
> >
> > So I just figured out that Connect’s static file servers dont work well
> > with symlinks…so I had tow rite myself a little workaround, a fallback
> > router, per-se. But whilst I did so, I had a nice meeting with the callback
> > hell. Here’s my code:
> >
> > CDN.use(config.CDN.baseUrl, function(req, res, next){
> > if(err) { next(); throw err; }
> > fs.lstat(config.base+"/cdn"+req.url, function(err,stats){
> > if(stats.isSymbolicLink()) {
> > fs.readlink(config.base+"/cdn"+req.url,
> > function(err, linkstr){
> > if(err) throw err;
> > log.info("Redirecting request \""+req.url+"\"
> > to \""+linkstr);
> > fs.readFile(linkstr, function(err, data){
> > if(err) throw err;
> >
> > res.writeHead(200,{"Content-type":"text/html"});
> > res.end(data);
> > });
> > });
> > }
> > });
> > });
> > });
> >
> > Okay…thats lots. And how does one get around this and into a bit of nicer
> > code? It almost looks like a little pyramid there…
> >
> > Kind regards, Ingwie.
>
> --
> 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/32603590-e433-43a9-860a-8c12fdbac3f9%40googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
signature.asc
Description: Digital Signature
