Nested query in node js using mysql

前端 未结 3 1526
感动是毒
感动是毒 2021-02-14 20:47

I am trying following code at node js using mysql but getting error \"Cannot enqueue Query after invoking quit.

var mysql = require(\'mysql\');

var connection          


        
相关标签:
3条回答
  • 2021-02-14 21:08

    The problem is connection.end() triggered before your query is not finished yet. Try to put connection.end() to end of outer loop.

    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();
    });
    

    Hope it will be useful for you.

    0 讨论(0)
  • 2021-02-14 21:09

    I see two problems in your code:

    • You're calling connection.end() synchronously, but your queries run in a asynchronous flow. You have to call connection.end() only when you've finished the second query.
    • You're using a regular for loop to run assynchronous calls (you outter loop).

    To accomplish what you're trying to do, you have to consider those assynchronous scenarios. You could use promises or a module like async, that provides you a lot of methods to deal with assyncronous flows, like 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();
        }
    });
    

    Now it will guarantee that connection.end() will just be called when all your queries have finished.

    0 讨论(0)
  • 2021-02-14 21:18

    Remove connection end function

    ==> connection.end();

    0 讨论(0)
提交回复
热议问题