sql >> データベース >  >> RDS >> Mysql

mysqlを使用したノードjsのネストされたクエリ

    コードに2つの問題があります:

    • connection.end()を呼び出しています 同期的に実行されますが、クエリは非同期フローで実行されます。 connection.end()を呼び出す必要があります 2番目のクエリを終了したときのみ。
    • 通常のforを使用しています 非同期呼び出しを実行するためのループ(ループの外側)

    あなたがやろうとしていることを達成するために、あなたはそれらの非同期シナリオを考慮しなければなりません。 promisesを使用できます または、 asyncのようなモジュール 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();
        }
    });
    

    これで、connection.end()が保証されます。 すべてのクエリが終了したときに呼び出されます。



    1. トリガーを介してテーブルに列権限を適用する

    2. MySQLでSQLスクリプトを実行する方法は?

    3. テーブル作成時のMySQLエラー1022

    4. ローカルのMySQLデータベースに接続するためのPython3.2スクリプト