Итак, я новичок в nodejs. Я не просто хочу решить эту проблему, но я также хочу изучить эту концепцию.
1 приз имеет много победителей. Оба являются отдельными таблицами. Сначала я получаю список призов, связанных с определенным идентификатором. Я перебираю эти призы с помощью Promises.all () и затем для каждого приза запрашиваю победителей.
Вот мой код:
router.post("/getResult", function (req, res) {
const lottery_id = req.body.lottery_id;
const data = [];
//Find list of prices for given lottery_id. Note the sorting applied here
Prize.find({"lotid": lottery_id}).sort({name: 1})
.then(async function (prizes) {
try {
await Promise.all(prizes.map(async (prize) => {
//Sorting here works fine as confirmed by this log.
console.log(prize.name);
await Winner.find({"id": prize._id})
.then(function (winners) {
data.push({
prize: prize,
winners: winners
});
})
}));
//Sorting here is completely messed up.
// Something wrong with second query "Winner.find() and pushing data
res.send({success: 1, data: data});
} catch (err) {
console.log("Error " + err);
res.send({success: 0, data: err});
}
}).catch(function (err) {
res.send({success: 0, error: err});
})
});
Окончательный результат, который я получаю, не соответствует сортировке, примененной к призу. Может быть, запрос Winner.find () для 2-го приза заканчивается до 1-го приза и, следовательно, он помещается в данные до 1-го приза.