Node.js and asynchronous programming with Q

前端 未结 1 1965
陌清茗
陌清茗 2021-01-26 04:45

Is the following the correct way to go about things? This is a sign up controller action. Im creating a user and a group to add the user to. Notice I have method level variables

相关标签:
1条回答
  • 2021-01-26 05:35

    Is it ok to have the method level variables or will they be overriden by the another person signing up at the same time?

    No, they won't as they are locally scoped to your postSignUp function.

    It is however a little ugly, nesting them might be the better choice here:

    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
           // });
    };
    

    Do I really need to break down all the different steps into different functions or can I just have 1 async function?

    You have one async function currently, you might want to break that down into creating a user with a new group, and logging him in plus redirecting him to /tour.

    0 讨论(0)
提交回复
热议问题