Does anyone have any recommendations for how I could make this async.waterfall call neater? Ideally I'd be able to do something like:
async.waterfall([
serializeUser(user_id),
generateAccessToken(user_id),
generateRefreshToken(user_id)
], function(error, results) {
//my user, access token, and refresh token are all in results
});
But as far as I know, I can't just aggregate all of my results at the end without explicitly doing so throughout my functions array, nor can I just pass in variables like I did there, as each subsequent function call depends on the one prior to it. The code below is functioning just fine and does exactly what it needs to, I simply want to make it cleaner.
var fb_id = req.body.profile.fbID;
async.waterfall([
function(cb) {
return User.serializeUser(fb_id, cb);
},
function(user, cb) {
return auth.generateAccessToken(user._id, function(error, access_token) {
return cb(null, user, access_token);
});
},
function(user, access_token, cb) {
return auth.generateRefreshToken(user._id, function(error, refresh_token) {
if (error) {
return cb(error, null);
}
else if (refresh_token) {
return cb(null, {user: user, at: access_token, rt: refresh_token});
}
//no error but no token either- no clue what happened, return a code of 500 and say its a server error
else {
return cb(null, "An unknown error has occured.", 500);
}
});
}
], function(error, results){
if (err) {
console.log("Waterfall error: ", error, "\n");
res.send("Error: ", error);
}
else if (results) {
console.log("Waterfall results: ", obj, "\n");
res.status(200).json({ user: results.user, access_token: results.at.access_token, refresh_token: results.rt.tokenString})
}
else {
res.status(500).send("An unknown error has occured.");
}
})
}]
}]. \$\endgroup\$