Есть несколько проблем, связанных с тем, как вы это делаете, но, похоже, ваша основная проблема основана на вашем понимании обещаний.connection.query(...)
возвращает обещание с данными, которые вы пытаетесь использовать внутри него.Поскольку это обещание, а не немедленный возврат данных, вы не сможете получить к нему доступ так, как вы ожидаете.
Если вы уверены, что именно такой подход вы хотите использовать, вам нужно изучить возможности и async-await
внутри своей функции, чтобы у вас были данные, которые вы ищете, прежде чем перейти кследующая итерация вашего цикла.
Другим подходом может быть использование sequelize и использование include
в вашем запросе для автоматического включения данных в ваш запрос.Я уверен, что вы могли бы также пройти более сложный SQL-запрос, чтобы включить всю информацию в один запрос, но только несколько потенциальных советов для продвижения вперед.
=========================================================================== Редактировать:
Вот непроверенный пример, где я пытался изменить ваш код в соответствии с шаблоном асинхронности.Тем не менее, я думаю, что вы должны определенно изменить это, чтобы выполнить это как один запрос, а не циклически перебирать результаты.
async function test() {
let results;
try {
results = await connection.query('SELECT * FROM featured_tags WHERE status = 1 order by id desc');
} catch (e) {
return res.status(401).json({message:'there are some error with query'});
}
var featured_tagdataset = [];
var itemdata = [];
if (results.length > 0) {
for (var i = 0; i < results.length; i++) {
var row = results[i];
var featurtag = {};
featurtag.id = row.id;
featurtag.featured_tag = row.featured_tag;
// Get item results
let itemresult;
try {
itemresult = await connection.query("SELECT * FROM `items` WHERE status = 1 and FIND_IN_SET('"+ row.id +"' ,featured_tags) > 0");
} catch (e) {
// Handle error
}
if (itemresult.length > 0){
for(var l=0; l < itemresult.length; l++){
var itemrow = itemresult[l];
var item = {};
item.id = itemrow.id;
item.category_id = row.id;
item.name = itemrow.item_name;
itemdata.push(item);
}
}
console.log(itemdata);
featurtag.tag_items = itemdata;
featured_tagdataset.push(featurtag);
}
}
return res.status(200).json({message:'item list', data: featured_tagdataset});
}