ホームページ >データベース >mysql チュートリアル >最初の Promise の「失敗」出力の前に 2 番目の Promise エラー ハンドラーが実行されるのはなぜですか?
提供されたコードの最初の Promise Promise は先に進む前に findUser() が返されるのを待っていませんなぜなら:
Promise を返し解決する関数でデータベース クエリをラップします。クエリ結果との Promise:
me.findUser = function(params, res) { var username = params.username; return new Promise(function (resolve, reject) { pool.getConnection(function (err, connection) { console.log("Connection "); if (err) { console.log("ERROR 1 "); res.send({"code": 100, "status": "Error in connection database"}); reject(err); // Reject the promise with the error } else { connection.query('select Id, Name, Password from Users ' + 'where Users.Name = ?', [username], function (err, rows) { connection.release(); if (!err) { resolve(rows); // Resolve the promise with the query result } else { reject(err); // Reject the promise with the error } }); } }); }); }
最初の Promise が拒否されたため、2 番目の Promise のエラー ハンドラーが呼び出されます。ただし、console.log("Failed"); .then() ブロック内でエラーがスローされるため、エラー ハンドラーの行は実行されません。
最初の Promise の拒否を正しく処理するには、.then() の代わりに .catch() を使用します。
promise.then(function(data) { return new Promise(...); }, function (reason) { console.log("Failed"); });
以上が最初の Promise の「失敗」出力の前に 2 番目の Promise エラー ハンドラーが実行されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。