【发布时间】:2021-04-06 19:38:45
【问题描述】:
只是试图总结数据库中的值,然后对参数取平均值,但事情不会按预期工作,因为项目 1 和 2 是 100 和 33,对于两个用户来说,它应该是 66.5,但是只有其中一个获得所需的输出,请帮帮我,新手 :(
似乎有时有效,有时无效,但你知道演习,要么全部工作;-;
const sumItUp = async (project, sum) => {
// console.log(project);
await Project.findById(project, (err, result) => {
// console.log(result.completion_percentage);
sum += result.completion_percentage;
console.log(result.title + " " + sum);
});
return sum;
};
const updateUserCompletion = async (user) => {
// console.log(user);
let sum = 0;
for (var i = 0; i < user.projects.length; i++) {
sum = await sumItUp(user.projects[i], sum);
// console.log(user.name + " " + user.project[i].title + " " + sum);
}
// console.log(sum);
user.completion_percentage_of_all_projects = sum / user.projects.length;
user.save();
};
exports.updateTasks = async (request, res) => {
let id = request.body.id;
let project = request.projectObject;
// console.log(id);
let planned = 0,
wip = 0,
review = 0,
completed = 0;
project.tasks.map(async (task) => {
if (task._id.toString() === id.toString()) {
task.taskName = request.body.taskName;
task.taskDescription = request.body.taskDescription;
task.pessimisticTime = request.body.pessimisticTime;
task.optimisiticTime = request.body.optimisiticTime;
task.mostLikelyTime = request.body.mostLikelyTime;
task.status = request.body.status;
}
if (task.status === "PLANNED") planned++;
else if (task.status === "WIP") wip++;
else if (task.status === "Review") review++;
else if (task.status === "COMPLETED") completed++;
// console.log(task._id.toString(), id.toString());
});
let total_task = planned + wip + review + completed;
let comp_percentage =
(planned * 0 + wip * 0.33 + review * 0.66 + completed) / total_task;
// console.log(comp_percentage*100);
// console.log(request.body);
project.completion_percentage = comp_percentage * 100;
console.log("completion percentage:", project.completion_percentage);
const users = [];
project.save((err) => {
if (err) return res.status(400).json({ err: "Task not found" });
});
await project.team.forEach((user) => {
User.findById(user, (err, res) => {
if (err) {
res.status(400).json({ err: err });
} else {
updateUserCompletion(res);
}
});
});
// console.log(users);
// console.log(request.body);
return res.status(200).json({ project });
};
这是我的代码^
这些是输出: supposed to be the same :(
【问题讨论】:
-
欢迎来到 Stack Overflow!请使用tour(你会得到一个徽章!),环顾四周,并阅读help center,尤其是How do I ask a good question?,我还推荐Jon Skeet 的Writing the Perfect Question 和Question Checklist。特别是,将问题简化为minimal reproducible example 非常重要。
-
请将代码、错误消息、标记等发布为文本,而不是文本的图片。为什么:meta.stackoverflow.com/q/285551/157247
-
知道了,谢谢!
-
您能否将结果图片中的
console.log()s 包含在您的代码中,以便我们知道在哪里查找它? -
修复了问题,exec 似乎解决了问题
标签: javascript node.js mongodb dictionary async-await