#javascript #node.js #mongodb #asynchronous #mongoose
Вопрос:
Это работает так, как и ожидалось:
let responses = await Response.find({
responder_id: req.user._id,
}).populate({ path: "query_id", select: ["query_type", "content"] });
responses = responses.map((response) => {
return response.query_id;
});
Но ниже не указано:
let responses = await Response.find({
responder_id: req.user._id,
})
.populate({ path: "query_id", select: ["query_type", "content"] })
.map((response) => {
return response.query_id;
});
Единственное, о чем я могу думать, — это, возможно, как-то связано с асинхронной природой этих функций.
Комментарии:
1. используйте
.populate().exec().map()
это должно помочь
Ответ №1:
Приоритет не таков, как вы думаете. То , чего ждут, не Response.find(...)
есть, но Response.find(...).populate(...)
. Имея это в виду, вот как правильно написать это во второй форме (с той лишь разницей, что это пара круглых скобок).:
let responses = (await Response.find({
responder_id: req.user._id,
})
.populate({ path: "query_id", select: ["query_type", "content"] }))
.map((response) => {
return response.query_id;
});
Однако для того, чтобы это было читабельно, потребуется сделать некоторые отступы. В любом случае, первый фрагмент может быть легче прочитать.