使用_this来引用父类方法

时间:2016-01-17 15:41:36

标签: javascript node.js callback this

我在使用回调函数调用父类函数时使用前缀_this来引用父类函数。但是,当我运行节点服务器时,我收到错误消息' _这未定义'。我实际上直接从我学习的MEAN堆栈书中提取了这段代码,但我似乎无法解决这个问题。

父母职能

var getErrorMessage = function(err){
var message = '';
if(err.code){
    switch(err.code){
        case 11000:
        case 11001:
        message = 'Username already exists';
        break;
        default:
        message = 'Something went Wrong';
    }
} else{
    for(var errName in err.errors){
        if(err.errors[errName].message){
            message = err.errors[errName].message;
        }
    }
}

return message;
};

稍后在回调中调用函数

exports.saveOAuthUserProfile = function(req, profile, done){
User.findOne({provider: profile.provider, providerId: profile.providerId}, function(err,user){
    if(err){
        return done(err);
    } else{
        if(!user){
            var possibleUsername = profile.username || ((profile.email) ? profile.email.split('@')[0] : '');

            User.findUniqueUsername(possibleUsername, null, function(availableUsername){
                profile.username = availableUsername;

                user = new User(profile);

                user.save(function(err){
                    if(err){
                        var message = _this.getErrorMessage(err);
                        req.flash('error',message);

                        return res.redirect('/signup');
                    } else{
                        return done(err,user);
                    }
                });
            });
        } else{
            return done(err, user);
        }
    }
});
};

1 个答案:

答案 0 :(得分:1)

继续评论

在全局范围内的父函数之后声明如下。

::-webkit-scrollbar {
    -webkit-appearance: none;
}

稍后回调

var _this = {};
_this.getErrorMessage = getErrorMessage; // Passing the function reference

或者,您可以完全删除_this.getErrorMessage(/*YOUR_PARAMETERS_HERE*/); 并直接调用该函数,因为父函数在全局范围内。

注意:理解是父函数和回调都在同一个_this文件中,父文件在全局范围内相对于.js文件声明,而不是声明为.js,使其在客户端显式为全局GLOBAL.getErrorMessage对象。