我想在循环中的所有查询完成后返回结果(express.js,react.js,mysql)



我正在使用 react 和 express 做一个副项目。

我想在列表中发送数据库中特定项目的 7 天拖放数据以供搜索。

所以我像这样写代码。

使用date(droped_at) = date(date_add(now(),interval -*${i}* DAY)和 for 循环。

for (var i = 1; i < 8; i++) {
var resultSql1 = `SELECT T.channel_name, T.channel_number, T.VALUE, T.num from(SELECT itemId, channel_name, channel_number, COUNT(*) AS VALUE, ROW_NUMBER() over(order by value DESC) NUM FROM item_drop_exception WHERE  itemId = (SELECT itemId FROM item_exception WHERE itemid = '${id}') AND date(droped_at) = date(date_add(now(),interval -${i} DAY)) GROUP BY channel_name, channel_number) T WHERE T.NUM<=3 ORDER BY T.num ORDER BY T.NUM`
db.query(resultSql1, id, (err, data) => {
if (!err) {
list1.push(data);
if (list1.length == 7) {
res.send(list1);
}
}
else {
res.send(err);
}
})
}

但它不起作用。

我知道这种方法是错误的。

我认为在查询结果进入之前正在进行下一个循环,但我不知道该怎么办。

引入这样的七天数据对吗?

我想在所有结果都附加并完成时将数据发送到前面。

这并不容易,因为我是自学成才的,我需要帮助。

查询有一个小错误。

最后有一个双ORDER BY t.NUM,因此当您删除它时,查询将运行。但如果它给你正确的结果,只是可以回答的,fi我们有数据

所以

var resultSql1 = `SELECT T.channel_name, T.channel_number, T.VALUE, T.num from(SELECT itemId, channel_name, channel_number, COUNT(*) AS VALUE, ROW_NUMBER() over(order by value DESC) NUM FROM item_drop_exception WHERE  itemId = (SELECT itemId FROM item_exception WHERE itemid = '${id}') AND date(droped_at) = date(date_add(now(),interval -${i} DAY)) GROUP BY channel_name, channel_number) T WHERE T.NUM<=3 ORDER BY T.num`

每天都会给你一个结果

将函数调用转换为承诺,然后将其await到每个循环中,确保每个数据库查询逐个运行。

const { promisify } = require('util');
const dbQueryAsync = promisify(db.query);
async function getData(req, res) {
var { id } = req.params;
var list = [];
for (var i = 1; i < 8; i++) {
var resultSql1 = `SELECT ... `;
try {
var data = await dbQueryAsync(resultSql1, id);
list.push(data);
} catch(err) {
res.send(err);
}
}
res.send(list);
);

最新更新