Как я могу сделать объект из результата запросов? В блюдах таблица функционирует с запросами к базе данных. Как я могу это сделать, если запросы асинхронны?
const returnResultOfQuery = () => {
Dinner1300.count().exec(function (err, count) {
const random = Math.floor(Math.random() * count)
Dinner1300.findOne().skip(random).exec(
function (err, result) {
console.info(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.info(diet)я добавил пример запроса



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Один из способов добиться этого — сначала выполнить все запросы, используя 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.info ( result );
return result;
} );
} );
};
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.info ( diet );
PS: Я не тестировал приведенный выше код.
вы можете использовать код, это просто обертка обещания
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.info(diet)
Похоже, ваш пример не работает. Кроме того, не могли бы вы обновить свой вопрос, чтобы включить код для ваших запросов Mongo? На данный момент невозможно ответить на ваш вопрос, потому что мы не знаем, как выглядят ваши запросы.