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」キーワードにアクセスしているためにこのエラーが発生する理由を知っています。promise内の「this」はpreメソッドの後の「this」とは異なります。この問題の解決方法、割り当ててこの問題を解決しようとしましたthis._update。$ setは、コメント付きコードの例に示されている別の値に設定されていますが、保存した後はドキュメントを変更せず、this._update。$ set.salaray値を変更するだけで済みます。助けていただければ幸いです
あなたが使用することができます .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)
})
})
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加