我正在尝试使用mysql在节点js处跟踪代码但是收到错误“在调用quit后无法将查询排入队列。
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'USER',
password : 'PASS',
database : 'DB',
});
connection.connect();
var queryString = 'SELECT * FROM tbl_product';
connection.query(queryString, function(err, rows, fields) {
if (err) throw err;
for (var i in rows) {
console.log('Product Name: ', rows[i].product_name);
var emp_query = 'SELECT * FROM tbl_employer';
connection.query(queryString, function(emp_err, emp_rows, emp_fields) {
if (emp_err) throw emp_err;
for (var e in emp_rows) {
console.log('Employer Name: ', emp_rows[e].company_name);
}
});
}
});
connection.end();
答案 0 :(得分:7)
我在你的代码中看到两个问题:
connection.end()
,但您的查询是在异步流中运行的。只有在您完成第二次查询后,您才需要致电connection.end()
。for
循环来运行异步调用(您可以使用循环)。要完成您尝试执行的操作,您必须考虑这些异步方案。您可以使用promises
或类似async
的模块,它为您提供了许多方法来处理同步流,例如async.each()
:
connection.query(queryString, function(err, rows, fields) {
if (err) throw err;
async.each(rows, function (row, callback) {
console.log('Product Name: ', row.product_name);
var emp_query = 'SELECT * FROM tbl_employer';
connection.query(queryString, function(emp_err, emp_rows, emp_fields) {
if (emp_err) callback(emp_err);
for (var e in emp_rows) {
console.log('Employer Name: ', emp_rows[e].company_name);
}
callback();
});
});
}, function (err) {
connection.end();
}
});
现在它将保证在您的所有查询完成后才会调用connection.end()
。
答案 1 :(得分:4)
删除连接结束功能
==> connection.end();
答案 2 :(得分:1)
在您的查询尚未完成之前,问题是connection.end()
已触发。尝试将connection.end()
置于外循环的末尾。
connection.query(queryString, function(err, rows, fields) {
if (err) throw err;
for (var i in rows) {
console.log('Product Name: ', rows[i].product_name);
var emp_query = 'SELECT * FROM tbl_employer';
connection.query(queryString, function(emp_err, emp_rows, emp_fields) {
if (emp_err) throw emp_err;
for (var e in emp_rows) {
console.log('Employer Name: ', emp_rows[e].company_name);
}
});
}
connection.end();
});
希望它对你有用。