У меня есть массив идентификаторов категорий в порядке, я должен сделать карту и получить элементы из этих категорий и, в конце концов, сохранить исходный порядок массива
что я делал:
const info = []
Promise.all(categoryItem.next_steps.map((next_step) => {
return categoryItemSvcV2.getAllItensNoOrderByCategoryId(next_step.category, idpage)
.then((result) => {
info.push(result)
})
})).then(() => {
res.json({ success: true, info })
})
categoryItem.next_steps - это массив идентификаторов категорий по порядку, однако каждый раз, когда я вызываю эту функцию, она отображается в порядке
Отвечает ли это на ваш вопрос? Как вернуть значение из асинхронной функции обратного вызова?
Promise.all
делает это из коробки, не приносите свой массив:
Promise.all(categoryItem.next_steps.map(next_step =>
categoryItemSvcV2.getAllItensNoOrderByCategoryId(next_step.category, idpage)
)).then(info => {
// ^^^^
res.json({ success: true, info })
});
Поскольку вы используете Promise.all, вам не нужно создавать отдельный массив. Глядя на ваш код выше, это должно работать
const values = await Promise.all(
categoryItem.next_steps.map((next_step) =>
categoryItemSvcV2.getAllItensNoOrderByCategoryId(next_step.category, idpage)
)
);
res.json({ success: true, values });
Не нажимайте на массив вне промиса. Это принесет вам только боль