我正在尝试在findOneAndUpdate预钩中修改文档,代码如下所示
userSchema.pre('findOneAndUpdate', function (next) {
// this._update.$set
//var user = new User(this._update.$set)
var promiseArray = []
promiseArray.push(// Fetching some data from other collection)
Promise.all(promiseArray).then(function (values) {
if (values[0].length === 0) {
return next('Data not found')
} else {
this._update.$set.salary = values.salary
return next()
}
}).catch(function (err) {
next(err)
})
})
我遇到错误
TypeError: Cannot read property '$set' of undefined
我知道为什么会收到此错误,因为我正在promise中访问“ this”关键字,pre方法后,promise中的“ this”与“ this”不同 如何解决这个问题,我尝试通过分配解决问题 将this._update。$ set设置为不同的值,并在注释代码中显示示例,但保存后不修改文档,我们只需更改this._update。$ set.salaray值。任何帮助表示赞赏
答案 0 :(得分:1)
您可以使用.bind()
Promise.all(promiseArray).then(function (values) {
if (values[0].length === 0) {
return next('Data not found')
} else {
this._update.$set.salary = values.salary
return next()
}
}.bind(this)).catch(function (err) {
next(err)
})
})