Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête imbriquée dans le nœud js à l'aide de mysql

Je vois deux problèmes dans votre code :

  • Vous appelez connection.end() de manière synchrone, mais vos requêtes s'exécutent dans un flux asynchrone. Vous devez appeler connection.end() uniquement lorsque vous avez terminé la deuxième requête.
  • Vous utilisez un for normal boucle pour exécuter des appels asynchrones (votre boucle externe).

Pour accomplir ce que vous essayez de faire, vous devez considérer ces scénarios asynchrones. Vous pouvez utiliser des promises ou un module comme async , qui vous fournit de nombreuses méthodes pour gérer les flux asynchrones, comme 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();
    }
});

Maintenant, il garantira que connection.end() sera appelé lorsque toutes vos requêtes seront terminées.