首页 > 解决方案 > NodeJS - 异步/等待不在 Express Route 中等待

问题描述

我试图通过使我的所有数据库调用同步来逃避我的快速应用程序中的回调地狱。然而,即使使用 async/await 和 promise,下面的函数也会返回“未定义”,因为 console.log 在前面的语句完成之前被命中。

app.post("/users", async (req, res) => {
    ...
    const users = await GetUsersFromDatabase();
    console.log(users);
    ...
});

下面列出的异步函数如下:

const DBUtil = require("./db-service");
...
async function GetUsersFromDatabase() {
  var p = new Promise(function(resolve, reject) {
    DBUtil.query(
      "SELECT * FROM Users",
      (err, data) => {
        if (err) {
          reject(error);
        }
        resolve(data.recordset);
      });
  });
}

db-service 如下所示:

const sql = require('mssql');
let connPoolPromise = null;
var dbConfig = require('./config/database_config.json');

const getConnPoolPromise = () => {
  if (connPoolPromise) return connPoolPromise;

  connPoolPromise = new Promise((resolve, reject) => {
    const conn = new sql.ConnectionPool(dbConfig);

    conn.on('close', () => {
      connPoolPromise = null;
    });

    conn.connect().then(connPool => {
      return resolve(connPool);
    }).catch(err => {
      connPoolPromise = null;
      return reject(err);
    });
  });

  return connPoolPromise;
}

// Fetch data example using callback
exports.query = (sqlQuery, callback) => {

  getConnPoolPromise().then(connPool => {

  }).then(result => {
    callback(null, result);
  }).catch(err => {
    callback(err);
  });

};

上面的 console.log 打印

不明确的

我确保 sql 数据正确返回。但是为什么我的异步方法不起作用?

标签: node.jsexpresspromiseasync-await

解决方案


推荐阅读