sql >> Base de Datos >  >> RDS >> Mysql

Consulta anidada en el nodo js usando mysql

Veo dos problemas en tu código:

  • Estás llamando a connection.end() sincrónicamente, pero sus consultas se ejecutan en un flujo asíncrono. Tienes que llamar a connection.end() solo cuando haya terminado la segunda consulta.
  • Estás usando un for regular bucle para ejecutar llamadas asincrónicas (su bucle externo).

Para lograr lo que está tratando de hacer, debe considerar esos escenarios asincrónicos. Podría usar promises o un módulo como async , que le proporciona muchos métodos para lidiar con flujos asíncronos, como 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();
    }
});

Ahora garantizará que connection.end() solo se llamará cuando todas sus consultas hayan terminado.