Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verschachtelte Abfrage in node js mit mysql

Ich sehe zwei Probleme in Ihrem Code:

  • Sie rufen connection.end() auf synchron, aber Ihre Abfragen werden asynchron ausgeführt. Sie müssen connection.end() aufrufen erst wenn Sie die zweite Abfrage beendet haben.
  • Sie verwenden einen normalen for loop, um asynchrone Aufrufe auszuführen (Sie outter loop).

Um das zu erreichen, was Sie versuchen, müssen Sie diese asynchronen Szenarien berücksichtigen. Sie könnten promises verwenden oder ein Modul wie async , das Ihnen viele Methoden zur Verfügung stellt, um mit asynchronen Flüssen umzugehen, wie 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();
    }
});

Jetzt wird garantiert, dass connection.end() wird nur aufgerufen, wenn alle Ihre Abfragen abgeschlossen sind.