#javascript #node.js #mongodb #express #mongoose
#javascript #node.js #mongodb #выразить #mongoose
Вопрос:
Как я могу создать объект из результата запросов? В meals таблица функционирует с запросами к базе данных. Как я могу это сделать, если запросы асинхронны?
const returnResultOfQuery = () => {
Dinner1300.count().exec(function (err, count) {
const random = Math.floor(Math.random() * count)
Dinner1300.findOne().skip(random).exec(
function (err, result) {
console.log(result)
})
})
const week = [
{id: 1, day: 1},
{id: 2, day: 2},
{id: 3, day: 3},
{id: 4, day: 4},
{id: 5, day: 5},
{id: 6, day: 6},
{id: 7, day: 7},
]
const diet = week
.map(value => ({
id: value.id,
day: value.day,
meals: [
returnResultOfQuery(),
returnResultOfQuery(),
returnResultOfQuery()
]
}))
console.log(diet)
Комментарии:
1. Похоже, ваш пример не работает. Кроме того, не могли бы вы обновить свой вопрос, включив в него код для ваших запросов Mongo? На данный момент невозможно ответить на ваш вопрос, потому что мы не знаем, как выглядят ваши запросы
2. я добавил пример запроса
Ответ №1:
вы можете использовать код, это просто оболочка promise
const returnResultOfQuery = () => {
return new Promise((resolve, reject) => {
Dinner1300.count().exec(function (err, count) {
const random = Math.floor(Math.random() * count)
Dinner1300.findOne().skip(random).exec(
function (err, result) {
if (err) {
return reject(err);
}
return resolve(result);
});
});
});
}
const week = [
{id: 1, day: 1},
{id: 2, day: 2},
{id: 3, day: 3},
{id: 4, day: 4},
{id: 5, day: 5},
{id: 6, day: 6},
{id: 7, day: 7},
]
const diet = Promise.all(week
.map(value => ({
id: value.id,
day: value.day,
meals: [
returnResultOfQuery(),
returnResultOfQuery(),
returnResultOfQuery()
]
}))
);
console.log(diet)
Ответ №2:
Один из способов добиться этого — сначала выполнить все запросы с помощью Promise.all
и, как только вы получите результаты, создайте новый объект. Что-то вроде:
const week = [
{ id : 1, day : 1 },
{ id : 2, day : 2 },
{ id : 3, day : 3 },
{ id : 4, day : 4 },
{ id : 5, day : 5 },
{ id : 6, day : 6 },
{ id : 7, day : 7 }
];
const returnResultOfQuery = () => {
return Dinner1300.count ().exec ( function ( err, count ) {
const random = Math.floor ( Math.random () * count );
return Dinner1300.findOne ().skip ( random ).exec (
function ( err, result ) {
console.log ( result );
return resu<
} );
} );
};
let promises = [];
for ( let x in week ) {
promises.push ( returnResultOfQuery () );
promises.push ( returnResultOfQuery () );
promises.push ( returnResultOfQuery () );
}
let diet = [];
Promise.all ( promises ).then ( function ( result ) {
let i = 0;
for ( let x in week ) {
diet.push (
{
id : x.id,
day : x.day,
meals : [
result[ i ],
result[ i 1 ],
result[ i 2 ]
]
}
);
i = i 3;
}
} );
console.log ( diet );
P.S: Я не тестировал приведенный выше код.