我真的很困惑這個回調的價值,以及我知道這個值總是取自它被調用的地方,但在下面的代碼中,我無法弄清楚發生了什麼。關於回調的困惑
userSchema.pre("save", function(next) {
let user = this;
bcrypt.hash(user.password, 10, function(err, hash) {
if (err) {
next(err)
} else {
user.password = hash;
next();
}
})
});
我正在看與貓鼬節點JS的教程,因此教練說: 在該回調函數的上下文中,詞語此指對象,這是
let userSchema = new mongoose.Schema({
password: {
type: String,
required: true
}
});
這裏不應該指代Node Global Object而不是那個對象嗎?
所以我真的很困惑這是怎麼發生的,例如,如果我試圖在簡單的JavaScript中模仿這種代碼行爲。
function UserSchema() {
this.pre = function(cb) {
return cb();
}
}
function Bycrypt() {
this.hash = function(cb) {
return cb();
}
}
userSchema.pre(function() {
var user = this;
bycrypt.hash(function() {
console.log(user)
})
});
因爲回調函數在窗口的上下文稱這將記錄用戶爲窗口對象。
好吧,我知道這是一個奇怪的問題要問。
在你的代碼演示中使用下面的答案:https://jsfiddle.net/e9p3677c/ –
答案更新:https://stackoverflow.com/a/47486224/1636522 :-) – leaf