我真的很困惑这个回调的价值,以及我知道这个值总是取自它被调用的地方,但在下面的代码中,我无法弄清楚发生了什么。关于回调的困惑
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