JavaScript — обновление записей mongodb не работает все время

Обновление записей mongodb не работает все время

Прежде чем ответить на ваш вопрос, я хочу отметить несколько проблем с вашим кодом.

  1. Вы смешиваете функции стиля обратного вызова с асинхронным ожиданием (на основе обещаний). Вы используете await в Rating, почему бы не сделать это и в History?
  2. Вы используете выразительную базу данных, которая позволяет вам делать сложные запросы, используйте это в ваших интересах.
  3. Из-за того, что вы передали обратный вызов, но пытались отрисовать /delete в конце, / delete будет выполняться до того, как ваш обратный вызов будет вызван из-за асинхронной природы обратных вызовов. Для того, чтобы ваш код завершился, вы либо используете полный стиль обратного вызова для всего, либо на основе обещаний, либо, конечно, async await, что является синтаксическим сахаром поверх обещаний.

Давайте запросим в БД списки по index: index , учтите, что я использовал limit. В вашем примере вы берете их все в память, тратя впустую ресурсы пропускную способность сети, всегда ограничивая ваши запросы!

Вот пример с async await:

 app.post("/delete", async function (req, res, next) { var gameNumber = req.body.test const [ gameRetrieved ] = await History.find({ gameNumber }).limit(1) await Rating.updateOne({ name: gameRetrieved.team1Player1 }, { games: 9999 }) }); 

Вот пример с обратными вызовами:

 app.post("/delete", async function (req, res, next) { var gameNumber = req.body.test return History.find({ gameNumber }).limit(1).exec((err, [ gameRetrieved ]) ={amp}gt; { return Rating.updateOne({ name: gameRetrieved.team1Player1 }, { games: 9999 }).exec((err, rating)={amp}gt;{ res.render('/delete') }) }) }); 

Я не принимал во внимание обработку ошибок, поскольку это не является областью здесь. Подводя итог: обратный вызов / обещание является асинхронным, выполнение чего-либо вне его области будет выполняться до / после него в зависимости от ситуации, которая в вашем случае иногда заканчивалась до рендеринга delete, а иногда нет.

Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector