繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM