Мне нужно выполнить запрос mysql для каждого элемента массива и добавить окончательные результаты в ответ.
Нет ли способа сделать это без добавления setTimeout?Я нахожу это странным.Перепробовал все из модуля async / await, обещания, обратного вызова, async.js. Как справиться с чем-то подобным на практике?
Вот что я пытаюсь сделать
let reseach = { }
let drinktypes = ["1", "2", "3", "4"];
async.eachSeries(
drinktypes,
async item => {
console.log( 'item:', item )
let query = ` SELECT us.*,
fl.web_path,
pr.product_name,
pr.acidity,
pr.drink_type,
pr.recmd,
pr.raw_ingredient,
pr.milling,
pr.label_image as li,
fl2.web_path AS wp,
pr.alcohol,
pr.sake_index,
pr.kouboname,
pr.kojiname,
pr.product_details,
pr.memo,
pr.type_name,
pr.code AS code,
pr.raw_ingredient,
pr.milling,
mk.brewery_name,
mk.prefecture
FROM users_scores us
join products pr
ON us.product_id = pr.pid
LEFT JOIN fileslabels fl2 ON pr.label_image = fl2.id
join makers mk
ON pr.brewery = mk.mid
join product_label pl
ON pr.pid = pl.product_id
join files fl
ON pl.file_id = fl.id
WHERE user_id =\"${req.body.userid}\"
AND dranktimes <> 0
AND pr.drink_type = \"${item}\"`;
connection.query(query, function (error, results ,fields) {
if(!error) {
reseach[item] = results[0];
} else {
throw error;
}
});
Promise.resolve() // <-- instead of callback
},
err => {
console.log('err:', err)
console.log(reseach) // null
setTimeout(function(){
console.log("timeout", reseach); //works
}, 100);
}
)