コード内で、findUser 関数用に作成された Promise が実行されますただし、関数自体は非同期です。したがって、promise は findUser がデータを取得できる前に解決されてしまいます。
値を同期的に返すのではなく、Promise を返すように findUser 関数を変更します。以下に例を示します。
me.findUser = function(params, res) { var username = params.username; return new Promise(function (resolve, reject) { pool.getConnection(function (err, connection) { if (err) { reject(err); return; } connection.query('select Id, Name, Password from Users ' + 'where Users.Name = ?', [username], function (err, rows) { connection.release(); if (err) { reject(err); } else { resolve(rows); } }); }); }); }
findUser でエラーが発生したときに 2 番目の Promise のエラー ハンドラーが拒否されるため、「エラー ハンドラー 2 番目」メッセージが表示されます。これを修正するには、コードを次のように変更します。
promise.then(function(data) { return new Promise(function (resolve, reject) { loginC.doSomething(data); if (success) { console.log("Success 2"); resolve(data); } else { console.log("Failed 2"); reject("Error in doSomething"); } }); }).catch(function (reason) { console.log("Error in findUser: " + reason); });
以上がNode.js で Express と Promise を使用すると Promise が途中で解決されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。