Mysql
 sql >> Database >  >> RDS >> Mysql

Query annidata nel nodo js usando mysql

Vedo due problemi nel tuo codice:

  • Stai chiamando connection.end() in modo sincrono, ma le query vengono eseguite in un flusso asincrono. Devi chiamare connection.end() solo quando hai terminato la seconda query.
  • Stai usando un normale for loop per eseguire chiamate asincrone (tu outout loop).

Per realizzare ciò che stai cercando di fare, devi considerare quegli scenari asincroni. Potresti usare promises o un modulo come async , che fornisce molti metodi per gestire i flussi asincroni, come 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();
    }
});

Ora garantirà che connection.end() verrà chiamato solo quando tutte le tue richieste saranno terminate.