Всем привет.
Задача мне показалась на первый взгляд простой, но уже 2 часа сижу над ней.
Пишу rest api на node js.
Есть роутер(express) который принимает 2 параметра в поле запроса(query params) ->
http://localhost:5000/api/item/?title=new task&user_id=1
Я достаю эти параметры на сервере ->
router.get('/', async (req, res) => {
const {title,user_id} = req.query
})
Далее мне надо по этим параметрам получить все совпадения с базы.
router.get('/', async (req, res) => {
const {title,user_id} = req.query
const items = await Item.findAll({ where: { title, user_id } })
})
и потом надо прогнать через цикл массив items и при каждой итерации доставать у каждого элмента items -> user_id, делать запрос в базу и получать определенные данные о пользователе который создал этот item, и в конечном итоге массив с объектами items(+плюс у каждого айтемса добавленные данные о пользователе) вернуть клиенту.
Примерно такую логику я ждал :
let result = await items.map(async (item) => {
const { title, phone, name, email } = await User.findByPk(item.user_id)
return {
id: item.id,
title: item.title,
price: item.price,
image: item.image,
createdAt: item.createdAt,
user: { title, phone, name, email }
}
})
res.json({ valid: true, data: result })
Но из за того что в цикле происходит асинхронность, то на каждой итерации возвращается промис, по итогу я получаю вот такой результат:
"data": [
{}
]
Пробовал await, then,callback
Подскажите как решить данную задачу ?