Sie verpassen this
Kontext hier,
.pre('save', function(next) {
Project.findOne({_id: this.project}).select('numberSeq').exec(function(err, doc) {
if (err) {
console.log(err);
}
console.log('pre-save hook firing');
this.number = doc.numberSeq;
console.log(this.number);
next();
});
})
wo Sie sagen:
this.number = doc.numberSeq;
console.log(this.number);
bezieht sich tatsächlich auf die Callback-Funktion der findOne-Abfrage, daher erhalten Sie am Ende die richtige console.log und falsche Daten eingefügt.
Sie können sich diesen Kontext des Pre-Save-Hooks merken und später die Nummer aktualisieren, indem Sie diesen Kontext innerhalb des Rückrufs verwenden. wie unten:
.pre('save', function(next) {
var tat=this;
Project.findOne({_id: this.project}).select('numberSeq').exec(function(err, doc) {
if (err) {
console.log(err);
}
console.log('pre-save hook firing');
tat.number = doc.numberSeq;
console.log(tat.number);
next();
});
})