首页 > 数据库 > mysql教程 > 为什么 Node.js Express 中的 Promise 不等待数据库查询完成?

为什么 Node.js Express 中的 Promise 不等待数据库查询完成?

DDD
发布: 2024-11-19 02:22:02
原创
925 人浏览过

Why Is My Promise in Node.js Express Not Waiting for the Database Query to Complete?

Promise 在 Node.js Express 中的行为不符合预期

理解问题

在您提供的代码中,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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板