Прежде чем углубиться в это, я знаю, что next () будет вызван до того, как будут завершены асин c операции. Но простое назначение свойства объекта не асинхронно, и я не уверен, почему next () вызывается перед этим назначением. Также обратите внимание, что я пробовал несколько версий этого.
Я пытаюсь установить свойство weekNum
в моей модели только при создании нового документа. Вот мой текущий код:
Schema.pre('save', async function (next) {
if (this.isNew) {
await this.constructor.countDocuments({ type: `${this.type}` }, function (err, count) {
if (err) {
console.log(err)
} else {
this.weekNum = count + 1;
console.log(this.weekNum); // this returns the correct variable in my console
next(); // when I request the created document, it has no weekNum property.
}
});
}
else {
next();
}
});
Я также попытался переместить next () за пределы и сразу после оператора await. Однако next () никогда не ожидает завершения этой операции. Как я могу убедиться, что мы не сохраним документ до обновления поля?