ホームページ >データベース >mysql チュートリアル >最初の Promise の「失敗」出力の前に 2 番目の Promise エラー ハンドラーが実行されるのはなぜですか?

最初の Promise の「失敗」出力の前に 2 番目の Promise エラー ハンドラーが実行されるのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-14 09:45:02743ブラウズ

Why is the Second Promise Error Handler Executed Before the First Promise's

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

最初の Promise が findUser() の完了を待たない

提供されたコードの最初の Promise Promise は先に進む前に findUser() が返されるのを待っていませんなぜなら:

  • .findUser() はコールバック関数を使用してデータベースに非同期的にクエリを実行します。
  • コールバックは Promise を解決するために使用されません。代わりに、Promise は行で解決されますが、Promise の作成時には未定義です。

解決策:

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
                    }
                });
            }
        });
    });
}

なぜエラー ハンドラー 2 番目が代わりに出力されるのか失敗

最初の 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 サイトの他の関連記事を参照してください。

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