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.

Attachment: signature.asc
Description: Digital Signature

Reply via email to