为什么我的 Node.js 登录 API 无法使用 Promise?

Patricia Arquette
发布: 2024-11-16 06:38:02
原创
632 人浏览过

Why Is My Node.js Login API Not Working with Promises?

Node.js Express 和 Promises 未按预期运行>

由于误解,您的 Node.js 登录 API 表现出意外行为Promise 如何与异步操作交互。让我们解决每个问题:

1。 Promise 不等待数据库查询

您的 findUser() 函数未返回 Promise。相反,它会立即返回 undefined,因为数据库查询是异步的并且需要时间来执行。要解决此问题,您需要将回调函数传递给 query() 方法,该函数将在查询完成时调用:

me.findUser = function(params, res) {
  var username = params.username;

  return new Promise(function (resolve, reject) {
    pool.getConnection(function (err, connection) {
      if (err) {
        reject(err);
      } else {
        connection.query('select ...', [username], function (err, rows) {
          connection.release();
          if (!err) {
            resolve(rows);
          } else {
            reject(err);
          }
        });
      }
    });
  });
}
登录后复制

2.错误处理程序未触发

您的错误处理程序未触发,因为承诺的reject() 方法从未被调用。在您的代码中,当发生错误时,您会从数据库查询的回调中返回 false。相反,您应该拒绝()带有错误的承诺:

me.findUser = function(params, res) {
  // ...

  return new Promise(function (resolve, reject) {
    // ...

    connection.query('...', [username], function (err, rows) {
      connection.release();
      if (!err) {
        resolve(rows);
      } else {
        reject(err);
      }
    });
  });
}
登录后复制

修订的路由文件

这是登录路由文件的更正版本,使用承诺正确:

module.exports = function(app) {

  app.post('/login/', async function(req, res, next) {

    try {
      // Find user in database
      var rows = await loginM.findUser(req.body, res);

      // Do something with the data
      var result = await loginC.doSomething(rows);

      console.log("Success");
    } catch (err) {
      console.log("Failed: " + err.message);
    }
  });
}
登录后复制

说明

通过使用 Promise,您可以确保登录 API 中的每个步骤按顺序执行。 wait 关键字使代码在继续之前等待 Promise 解析,确保下一步可以访问上一步的数据。此外,使用 try/catch 可以让您处理过程中可能发生的任何错误。

以上是为什么我的 Node.js 登录 API 无法使用 Promise?的详细内容。更多信息请关注PHP中文网其他相关文章!

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