首页 > 数据库 > mysql教程 > 为什么我的 Promise 在使用 Express 和 Promises 的 Node.js 中过早解析?

为什么我的 Promise 在使用 Express 和 Promises 的 Node.js 中过早解析?

DDD
发布: 2024-11-17 15:32:02
原创
928 人浏览过

Why Does My Promise Resolve Prematurely in Node.js with Express and Promises?

Node.js Express 和 Promise:解决不可预测的行为

Unwait Promise 的原因

在您的代码中,为 findUser 函数创建的 Promise 执行立即执行,但函数本身是异步的。因此,在 findUser 检索数据之前,promise 会提前解析。

实现正确的 Promise 执行

修改 findUser 函数以返回 Promise,而不是尝试同步返回值。下面是一个示例:

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);
            }
        });
      });
    });
}
登录后复制

错误处理

出现“error handler secondary”消息是因为当 findUser 遇到错误时,第二个 Promise 中的错误处理程序被拒绝。要解决此问题,请修改代码如下:

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);
        });
登录后复制

附加说明

  • 确保在连接回调中处理数据库连接错误。
  • 避免依赖异步操作的同步方法。
  • Promise 用于链接异步操作并可靠地处理结果。

以上是为什么我的 Promise 在使用 Express 和 Promises 的 Node.js 中过早解析?的详细内容。更多信息请关注PHP中文网其他相关文章!

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