ホームページ >データベース >mysql チュートリアル >Node.js Express の Promise がデータベース クエリの完了を待たないのはなぜですか?

Node.js Express の Promise がデータベース クエリの完了を待たないのはなぜですか?

DDD
DDDオリジナル
2024-11-19 02:22:02899ブラウズ

Why Is My Promise in Node.js Express Not Waiting for the Database Query to Complete?

Node.js Express で Promise が期待どおりに動作しない

問題を理解する

提供されたコードでは、Promise は実行を一時停止していません。 findUser 関数が完了するまで待機するコード。これは、findUser 関数が Promise を返さないためです。代わりに、すぐに unknown が返されるため、データベース クエリが完了するのを待たずにコードが続行されます。

コードの修正

これを修正するには、findUser 関数は次のように解決される Promise を返す必要があります。データベースから取得した行:

me.findUser = function(params, res) {
    var username = params.username;

    return new Promise(function (res, rej) {
        pool.getConnection(function (err, connection) {
            if (err) {
                rej('db error');
            } else {
                connection.query('SELECT Id, Name, Password FROM Users WHERE Users.Name = ?', [username], function (err, rows) {
                    connection.release();
                    if (!err) {
                        res(rows);
                    } else {
                        rej('other error');
                    }
                });
            }
        });
    });
}

この変更により、Promise はコードの実行を一時停止し、クエリが完了するのを待ってから続行します。 if/else ステートメント。

エラー ハンドラーの説明

エラー ハンドラーエラー ハンドラー 2 番目が出力されるのは、findUser 関数がエラー メッセージとともに Promise を拒否したためです。これにより、then ハンドラーがスキップされ、代わりに catch ハンドラー (「エラー ハンドラー 2 番目」というメッセージを含む) が呼び出されます。

これを解決するには、findUser 関数がエラーを処理し、目的の結果で解決されることを確認してください。データを正しく。さらに、Promise チェーンの次のレベルにエラー処理を追加して、後続のエラーを処理できます。

以上がNode.js Express の Promise がデータベース クエリの完了を待たないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。