以下是正确的处理方式吗?这是一个注册控制器操作。我正在创建一个用户和一个组以将用户添加到其中。请注意,我有称为用户和组的方法级别变量。其余代码使用 Q 模块进行异步。
是否可以使用方法级别变量,或者它们会被同时注册的其他人覆盖吗?
exports.postSignUp = function(req, res, next) {
var user,
group;
return Q.invoke(exports, 'parseUser', req, null)
.then(function(u)
{
user = u;
return Q.invoke(exports, 'postCreateUser', user).fail(function(err) { throw err; });
})
.then(function()
{
group = new Group();
group.userIds = [user._id];
return Q.invoke(exports, 'postCreateGroup', group).fail(function(err) { throw err; });
})
.then(function()
{
user.groupId = group._id;
group.userIds = [ user._id ];
})
.then(function()
{
return Q.ninvoke(req, 'login', user).fail(function(err) { throw err; });
})
.then(function()
{
return res.redirect('/tour');
})
.fail(function (err)
{
console.log('u:' + user);
console.log('g:' + group);
return exports.createValidationError(error, req, res, user);
});
};
是否可以使用方法级别变量,或者它们会被同时注册的其他人覆盖吗?
不,他们不会,因为它们的范围仅限于您的本地postSignUp
功能。
然而它有点难看,在这里嵌套它们可能是更好的选择:
exports.postSignUp = function(req, res, next) {
return Q.invoke(exports, 'parseUser', req, null).then(function(user) {
return Q.invoke(exports, 'postCreateUser', user).then(function(createdUser) {
var group = new Group();
group.userIds = [user._id];
return Q.invoke(exports, 'postCreateGroup', group).then(function(createdGroup) {
user.groupId = group._id;
group.userIds = [ user._id ]; // repeat this?
return Q.ninvoke(req, 'login', user)
}).then(function(loggedInuser) {
return res.redirect('/tour');
}).fail(function(err) {
console.log('g:' + group);
throw err;
});
}).fail(function(err) {
console.log('u:' + user);
return exports.createValidationError(error, req, res, user);
});
}) // .fail(function(err) {
// … // parseUser or createValidationError failed
// });
};
我真的需要将所有不同的步骤分解为不同的函数吗?或者我可以只拥有 1 个异步函数吗?
您当前有一个异步函数,您可能希望将其分解为使用新组创建用户,然后将其登录并重定向到/tour
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)