#javascript #mongodb #express #npm
Вопрос:
У меня есть список идентификаторов для запроса Mongo, с которым я выполняю цикл for, и он всегда возвращает пустое []. Первоначально он продолжал возвращать обещания, поэтому я перешел forEach
к стандарту для цикла, как вы видите здесь, и toArray()
оба из которых привели к пустому [].
async function queryRoles(id) {
const db = await connectToMongo()
let response;
try {
response = await db.collection("permissions").find({"_id": xxx}).toArray();
console.log(await response);
} catch (error) {
console.log(error);
}
return response;
}
async function checkAuthorisation(list, groups) {
for (const item of list) {
const index = list.indexOf(item);
const rolesList = await queryRoles(item._id);
console.log(rolesList);
};
}
Список ролей всегда возвращается в [] и никогда ничем не заполняется.
Однако, если я просто обновлю код с помощью того же запроса для одного документа mongo без использования цикла for, ожидаемый ответ вернется, поэтому я знаю, что подключение к MongoDB в порядке.
Что я делаю не так? Вырываю себе волосы в этот момент!!
Комментарии:
1. Можете ли вы завернуть заявление await следующим образом:
response = (await db.collection("permissions").find({"_id": xxx})).toArray();
2. Да, это не имело никакого значения.
3. пожалуйста, сначала преобразуйте идентификатор строки в ObjectId.
4. вы можете преобразовать строку в идентификатор объекта, используя var mongoose = require(‘мангуст’); var id = мангуст. Типы. Объект(строка);
Ответ №1:
Вы пробовали этот подход,
async function checkAuthorisation(list, groups) {
const roleList = await Promise.all(
list.map(async (item, index) =>
await queryRoles(item._id)
)
);
...
}