Я использую MongoDB с Express, и у меня есть выборка, чтобы получить список пользователей и отсортировать их по количеству достигнутых побед. Проблема в том, что 80% времени один и тот же код возвращает отсортированный список без проблем, но в 20% случаев ответ представляет собой пустой массив [].
У меня везде есть обещания, и я перепроверил, что проблема в методе find mongoDB, а не в методе sort. Я знаю о параллелизме и прочем, я просто не понимаю, почему это не работает.
app.get("/api/account/getSortedRank", (req, res) => {
const { query } = req;
const { userId } = query;
var getFriends = [];
User.findOne(
{
_id: userId
},
(err, user) => {
if (err) {
console.log("Server error");
}
user.friends.forEach(userFound => {
getFriends.push(userFound.user);
});
// getFriends is always correct!
}
).then(() => {
User.find({
_id: { $in: getFriends }
})
.sort({ wins: -1 })
.then(sortedUsers => {
// 50% of the time sortedUsers is an empty array!
let usersList = [];
sortedUsers.forEach(user => {
usersList.push({
firstName: user.firstName,
lastName: user.lastName,
userID: user._id,
wins: user.wins
});
});
return res.send({
success: true,
usersList
});
});
});
});