javascript - 如何使用node-mysql在for循环中创建对象?

标签 javascript mysql node.js socket.io

我在函数中有“for”循环,我想创建1个对象而不是多个来保存绘制调用。 有什么办法可以做到这一点吗?在我的测试中,我发现我无法在connection.query之外创建包含来自哪个查询的数据的var。所以我什至无法使用该查询中包含的全局变量。我对此很陌生,所以任何帮助都会很棒。

app.js 中包含的外部文件

    load_sent_mail: function(person_id, callback, socket) {
    pool.getConnection(function(err, connection) {
        connection.query('SELECT * FROM `mail` WHERE mail_sender = ' + person_id + '', function(err, mail_data) {
            if (!err) {
                for (var key in mail_data) {
                    var items_to_get_info = [];
                    if (mail_data[key].mail_spot_1 != 0) items_to_get_info.push(mail_data[key].mail_spot_1);
                    if (mail_data[key].mail_spot_2 != 0) items_to_get_info.push(mail_data[key].mail_spot_2);
                    if (mail_data[key].mail_spot_3 != 0) items_to_get_info.push(mail_data[key].mail_spot_3);
                    if (mail_data[key].mail_spot_4 != 0) items_to_get_info.push(mail_data[key].mail_spot_4);
                    if (items_to_get_info.length) {
                        connection.query('SELECT `person_items`.`id`, `items`.`item_image`, `items`.`item_place` FROM `person_items` INNER JOIN `items` ON `person_items`.`item_id` = `items`.`item_id` WHERE `person_items`.`id`IN  (' + items_to_get_info.join(",") + ')', function(err, items_in_mail) {
                            if (!err) {
                                callback(null, items_in_mail);
                            } else {
                                console.log(err)
                            }
                        });
                    } {
                        //0 items
                    }
                }
            }
        })
        connection.release();
    });
}

app.js

mail.load_sent_mail(person_id,function(err,items_in_mail){
    socket.emit('incoming_mail', items_in_mail);
});

最佳答案

如果我正确理解您的问题,这是否可以解决您的问题:

load_sent_mail: function(person_id, callback, socket) {
    pool.getConnection(function(err, connection) {
        connection.query('SELECT * FROM `mail` WHERE mail_sender = ' + person_id + '', function(err, mail_data) {
            if (!err) {
                // Move this line before the loop
                var items_to_get_info = [];
                for (var key in mail_data) {
                    if (mail_data[key].mail_spot_1 != 0) items_to_get_info.push(mail_data[key].mail_spot_1);
                    if (mail_data[key].mail_spot_2 != 0) items_to_get_info.push(mail_data[key].mail_spot_2);
                    if (mail_data[key].mail_spot_3 != 0) items_to_get_info.push(mail_data[key].mail_spot_3);
                    if (mail_data[key].mail_spot_4 != 0) items_to_get_info.push(mail_data[key].mail_spot_4);
                }
                // Move this line after the loop
                if (items_to_get_info.length) {
                    connection.query('SELECT `person_items`.`id`, `items`.`item_image`, `items`.`item_place` FROM `person_items` INNER JOIN `items` ON `person_items`.`item_id` = `items`.`item_id` WHERE `person_items`.`id`IN  (' + items_to_get_info.join(",") + ')', function(err, items_in_mail) {
                        if (!err) {
                            callback(null, items_in_mail);
                        } else {
                            console.log(err)
                        }
                    });
                }
            }
        })
        connection.release();
    });
}

我想我在某个地方丢失了一个括号,但我希望你能明白!

关于javascript - 如何使用node-mysql在for循环中创建对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37560873/

相关文章:

javascript - 手动创建的 JSON 记录

mysql - 我如何知道我的 docker mysql 容器何时启动并且 mysql 已准备好接受查询?

php - php中删除表记录

node.js - 使用 npm install 时报错 "ERR_OUT_OF_RANGE"

node.js - 如何找到我的机器人加入了多少个公会?

javascript - Microsoft Office.js Excel 加载项 - 使用 javascript/react 检索工作表/工作簿唯一 ID

javascript - 如何在javascript中重新排列数组

php - Chrome 403 禁止错误的 GCM

java - MySqlSyntaxErrorException 错误查询

node.js - ADFS sso 并使用 Passport-saml Express "No decryption key for encrypted SAML response"