Reputation: 138
I have a code block containing if else and most of the code in if and else is same, but due to one function call with callback, I have to quite a same code in both if and else block. I know a function can be created for this purpose but it will require me to pass too many paramaters. Here is the code block:
if (results[0].register_type == 'D') {
sessionData.register_type = results[0].register_type;
UserModel.updategcm_id(req.body, function (err, result) {
UserSessionModel.createSessionToken(sessionData, function (err, result, token) {
if (err) {
res.status(400).send(self.createResponse({}, {
success: false,
message: err.message
}));
return false;
}
res.status(200).send(self.createResponse({
token: token,
userid: results[0].id
}, {
success: true,
message: "User has logged in successfully"
}));
console.log("User has logged in successfully...\n");
});
});
} else {
UserSessionModel.createSessionToken(sessionData, function (err, result, token) {
if (err) {
res.status(400).send(self.createResponse({}, {
success: false,
message: err.message
}));
return false;
}
res.status(200).send(self.createResponse({
token: token,
userid: results[0].id
}, {
success: true,
message: "User has logged in successfully"
}));
console.log("User has logged in successfully...\n");
});
}
Upvotes: 0
Views: 1300
Reputation: 1666
You may use async module, so that you don't need to repeat the function.
Upvotes: 0
Reputation: 894
I think that the best solution is to move the repeated function to a function declaration and just pass it as callback. Your code would change to:
if (results[0].register_type == 'D') {
sessionData.register_type = results[0].register_type;
UserModel.updategcm_id(req.body, function (err, result) {
UserSessionModel.createSessionToken(sessionData, validateResponse);
});
} else {
UserSessionModel.createSessionToken(sessionData, validateResponse);
}
function validateResponse(err, result, token) {
if (err) {
res.status(400).send(self.createResponse({}, {
success: false,
message: err.message
}));
return false;
}
res.status(200).send(self.createResponse({
token: token,
userid: results[0].id
}, {
success: true,
message: "User has logged in successfully"
}));
console.log("User has logged in successfully...\n");
}
The code is much more clean now.
You could also factor out the whole createSessionToken
call into a function, but you'd have to be careful with passing sessionData
, self
and res
(depending on their respective scope).
Upvotes: 1