I'm using Node.js and mongoose to fetch data. Before sending the result i want to loop through the data and fetch some additional informations of a another mongoose collection.
I don't get it to manage, that the first mongoose call waits, that the other promises are finished. I assume that my mixture of promises and .then calls is a mess... :S
My Code:
exports.checkChats = (req, res, next) => {
console.log(req.userData.userId);
let modifiedChats = [];
let partner;
Messages.find({ $or: [{ "users.starter": req.userData.userId }, { "users.partner": req.userData.userId }] })
.then(chats => {
if (chats) {
console.log('Start');
const promises = chats.map(async chat => {
if (chat.users.starter.toString() === req.userData.userId.toString()) {
console.log('fetch partnerData for partner ' + chat.users.partner);
partner = chat.users.partner;
}
if (chat.users.partner.toString() === req.userData.userId.toString()) {
console.log('fetch partnerData for starter ' + chat.users.starter);
partner = chat.users.starter;
}
User.findById(partner).then(fetchedPartner => {
console.log('Partner fetched: ', fetchedPartner.userName);
modifiedChats.push({ id: chat._id, status: chat.status, lastMessage: chat.lastMessage, partnerName: fetchedPartner.userName, partnerImg: fetchedPartner.imagePath });
});
});
Promise.all(promises).then(() => {
console.log('End');
res.status(201).json({
message: 'Chats found',
chats: modifiedChats
});
});
}
}).catch(error => {
res.status(500).json({
message: 'Couldnt fetch chats!',
error: error
});
});
};
And the Terminallog:
Start
fetch partnerData for partner 5eb8502aad51b72012a2ccd1
fetch partnerData for partner 5eb84c93ad51b72012a2cc56
End
Partner fetched: Summer
Partner fetched: Pepe
Thank you guys.