提供されたコードでは、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 サイトの他の関連記事を参照してください。