1
我使用前綴_this從一個回調函數調用它時引用父類函數。但是,當我運行節點服務器時,出現錯誤消息'_this is not defined'。實際上,我直接從我正在學習的MEAN堆棧書中抽取這些代碼,但似乎無法解決此問題。使用_this來引用父類方法
父函數
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);
}
}
});
};
其中'_this'變量聲明爲'var _this = something' – Nirus
我沒有在任何地方聲明這是令人困惑的地方。這些代碼行直接從本書中獲取。它可能有助於注意到他有var message = \ _this.getErrorMessage ...在兩行分開,第2行以_this.get開頭....我試着從頭開始「\ _」,但後來我得到「.getErrorMessage()」不存在的消息。 –
那麼在這種情況下'_this'必須被定義,它不是一個保留關鍵字或任何類型,但'this'是一個保留關鍵字。我建議你刪除'_this'並直接調用你打算調用的方法。如果你仍然想'_this',那麼聲明'var _this = {}; _this.getErrorMessage = getErrorMessage'。它應該與分手合作。使用剛纔的getErrorMessage()工作的 – Nirus