我们正在尝试遍历作为数组发布到端点的所有协作者,并将它们推送到 collaboratorsArray。我们不希望函数 saveProject 在 forEach 循环完成之前执行。
我们目前得到的结果是 saveProject 没有等待,因此在保存项目时 collaboratorsArray 是一个空数组。
请注意,我们都是 Node.js 和 Promise 的新手。我们非常感谢您的任何建议!
这是我们的代码
export const newProject = async (req, res) => {
const { userID } = req.params
const { name, description, collaborators } = req.body
let collaboratorsArray = []
const loopCollaborators = async () => {
if (collaborators) {
return new Promise((resolve, reject) => {
collaborators.forEach(async username => {
const collaborator = await User.findOne({
username
})
collaboratorsArray.push(collaborator)
console.log('CollaboratorsArray ', collaboratorsArray)
})
resolve(collaboratorsArray)
})
}
}
const saveProject = async () => {
const getCollaboratorsProject = await loopCollaborators()
if (getCollaboratorsProject) {
try {
console.log('Project save now', collaboratorsArray)
const project = await new Project({
name,
description,
collaborators: collaboratorsArray,
projectOwner: userID
}).save()
res.status(201).json({
success: true,
projectID: project._id,
name: project.name,
description: project.description,
collaborators: project.collaborators,
projectOwner: project.projectOwner
})
} catch (error) {
res.status(400).json({ success: false, message: 'Invalid request', error })
}
}
}
saveProject()
}
这是我们的模型
export const Project = mongoose.model('Project', {
name: {
type: String,
required: true,
maxlength: 20
},
description: {
type: String
},
collaborators: {
type: Array
},
projectOwner: {
type: String,
required: true
}
})
不要使用Array.forEach
循环 with asycn/await
,使用传统for
循环。为什么 ?查看更多在 forEach 循环中使用 async/await;
async function newProject(req, res) {
try {
let { userID } = req.params,
{ name, description, collaborators } = req.body,
collaboratorsArray = [];
if (!collaborators) return
for (const username of collaborators) {
const collaborator = await User.findOne({ username });
collaboratorsArray.push(collaborator);
}
console.log('CollaboratorsArray ', collaboratorsArray);
const project = await new Project({
name, description,
collaborators: collaboratorsArray,
projectOwner: userID
}).save();
res.status(201).json({
success: true,
projectID: project._id,
name: project.name,
description: project.description,
collaborators: project.collaborators,
projectOwner: project.projectOwner
});
} catch (error) {
res.status(400).json({ success: false, message: 'Invalid request', error })
}
}
我认为 Express.js 会为你处理错误,所以你不需要try/catch
在每个请求处理程序中使用块!,在 express 中使用全局错误处理程序......
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句