我有一个代码块,其中包含if else和if和else中的大多数代码是相同的,但由于一个函数调用回调,我必须在if和else块中使用完全相同的代码。我知道可以为此目的创建一个函数,但它需要我传递太多的参数。这是代码块:
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");
});
}
答案 0 :(得分:0)
我认为最好的解决方案是将重复的函数移动到函数声明中,然后将其作为回调传递。您的代码将更改为:
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");
}
现在代码更干净了。
您还可以将整个createSessionToken
调用分解为函数,但是您必须小心传递sessionData
,self
和res
(取决于各自的范围。)
答案 1 :(得分:0)
您可以使用异步模块,这样就不需要重复该功能了。