[英]I want to return the result when all the queries in the loop is done(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);
}
})
}
但它不起作用。
我知道方法不对。
我认为下一个循环在查询结果进来之前正在进行,但我不知道该怎么做。
像这样引入 7 天的数据是否正确?
当所有结果都是 append 并完成时,我想将数据发送到前面。
这并不容易,因为我是自学成才的,我需要帮助。
查询有一个小错误。
最后你有一个双ORDER BY t.NUM
,所以当你删除它时,查询就会运行。 但是,如果它为您提供正确的结果,则只能负责,因为我们有数据
所以
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`
每天都会给你一个结果
将您的 function 调用转换为 promise,然后在每个循环中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);
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.