在您提供的代码中,promise 不会暂停执行等待 findUser 函数完成的代码。这是因为 findUser 函数没有返回承诺。相反,它会立即返回 undefined,导致代码无需等待数据库查询完成即可继续执行。
要解决此问题,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 语句。
第二个错误处理程序会输出错误处理程序,因为 findUser 函数拒绝带有错误消息的 Promise。这会导致 then 处理程序被跳过,并调用 catch 处理程序(带有消息“第二个错误处理程序”)。
要解决此问题,请确保 findUser 函数处理错误并以所需的方式解析数据正确。此外,您可以将错误处理添加到承诺链的下一级以处理任何后续错误。
以上是为什么 Node.js Express 中的 Promise 不等待数据库查询完成?的详细内容。更多信息请关注PHP中文网其他相关文章!