Node.js 如何使节点在返回文档之前等待?
检索json文档时,我希望更新一个邀请数组。这个数组由_id值组成,我想更新这些值并将其设置为用户名。为此,我查找_id并找到相应的用户名。但是,array.push函数在查找相应用户名之前完成。因此会添加一个空值。如何使节点仅在找到相应的用户名后才等待推送Node.js 如何使节点在返回文档之前等待?,node.js,asynchronous,Node.js,Asynchronous,检索json文档时,我希望更新一个邀请数组。这个数组由_id值组成,我想更新这些值并将其设置为用户名。为此,我查找_id并找到相应的用户名。但是,array.push函数在查找相应用户名之前完成。因此会添加一个空值。如何使节点仅在找到相应的用户名后才等待推送 exports.contactBoard = (req, res) => { const username = req.params.username; contactUsername = ''; User.f
exports.contactBoard = (req, res) => {
const username = req.params.username;
contactUsername = '';
User.findOne({
'username': username
}).then(document => {
document.invitationsFromFriends.forEach(element => {
User.findById(element).then(document => {
contactUsername = document.username;
console.log("locatie 1" + contactUsername)
})
})
console.log("locatie 2" + contactUsername)
document.invitationsFromFriends.push(contactUsername);
res.status(200).json({
message: "retrieved user contacts",
contacts: document
})
})
}
使用
async wait
或promise
执行此操作
由于数据库请求是异步执行的,您需要等待它返回以发送响应,或者从promise回调发送响应
对于Async Wait,这可能是一个可能的重构:
exports.contactBoard = async (req, res) => {
...
const doc = await User.findOne({'username': username}).exec();
doc.invitationsFromFriends.forEach (async element =>
const doc1 = await User.findById(element).exec()
contactUsername = doc1.username;
console.log("locatie 1" + contactUsername)
}))
console.log("locatie 2" + contactUsername)
document.invitationsFromFriends.push(contactUsername);
res.status(200).json({
message:"retrieved user contacts",
contacts: document
})
对于promise,从回调发送响应:只需将
res.status(200).json(..)
调用移动到User.findById()
的函数中即可。