gpt4 book ai didi

node.js - Express Node.js Controller 不等待数据操作并返回旧数据

转载 作者:太空宇宙 更新时间:2023-11-03 22:06:06 25 4
gpt4 key购买 nike

我正在使用express.js、node.js连接mongoDB。

我的目标

我有一个测验集合。我有一个**答案集合****。当我向用户显示测验列表时,我想向用户显示他/她是否已经参加过任何测验。

我的方式

  1. 我向测验集合中的每个文档添加了一个 bool 字段 "user_participated": false
  2. 当我的路线调用“/all-quizzes”时,它会调用 Controller 中的一个函数,该函数首先将 forEach 中的所有文档“user_participated”设置为 false,然后根据当前的“user_id”和“quiz_id”找到一个数据来自同一 forEach 内的“answers”集合,如果存在,则将测验文档的“user_participated”设置为 true。然后它返回整个数据。

我的问题

在 Controller 函数中,它很快就会找到所有测验文档,它不会等到'forEach'执行并返回该数据,然后执行'forEach'。因此,当我再次刷新页面时,我可以看到我所做的操作。

这是我的代码

exports.getAllQuiz = async function(req, res){
var newQuiz = new Quiz; // declaring that newQuiz is an instance of quiz helper
try{
var finalQuizs = await newQuiz.findAll();
var authToken = req.cookies.auth; // getting the logged in user token
var autherised_user = '';
if(authToken != undefined && authToken != null && authToken.trim().length > 0){
jwt.verify(authToken, config.secret, function(err, decoded) {
if (err) return res.status(500).send({ auth: false, message: 'Failed to authenticate token.' });
else {
autherised_user = decoded.id;
finalQuizs.forEach(async function(item){
// first I am setting all the document's user_participated value to false
await quizModel.findOneAndUpdate({_id : ObjectId(item._id)}, {user_participated : false});

// now I am setting selected documents user_participated to true as per current user
// for that I am checking in answer collection if a data is present with
// current user id and this quiz id
await AnswerModel.findOne({quiz_id : item._id, participated_user_id : autherised_user}, async function(err, result){
if(result != null){
await quizModel.findOneAndUpdate({_id : ObjectId(item._id)}, {user_participated : true});
}
});
});
}
});
}
return finalQuizs;
}catch(e){

}
};

最佳答案

我认为您的返回值finalQuizs是在forEach语句之前填充的。因此更新查询不会按您的预期更改它。这就是页面刷新后获取更新数据的原因。 如果您希望返回值中包含 user_participated: true,则应在 findOneAndUpdate 行之后获取它。您应该在 try block 的末尾执行类似的操作:

return await newQuiz.findAll();

关于node.js - Express Node.js Controller 不等待数据操作并返回旧数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54059355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com