NodeJS — Асинхронный / ожидающий, не ожидающий в экспресс-маршруте

#node.js #express #promise #async-await

#node.js #экспресс #обещание #async-ожидание

Вопрос:

Я пытаюсь избежать ада обратного вызова в своем экспресс-приложении, сделав все мои вызовы базы данных синхронными. Однако даже при использовании async / await и promises приведенная ниже функция возвращает ‘undefined’, потому что консоль.запись в журнал выполняется до завершения выполнения предыдущего оператора.

 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);
  });

};
 

Консоль.журнал выше печатает

не определено

И я убедился, что данные sql возвращены правильно. Однако почему мой асинхронный метод не работает?

Комментарии:

1. Вы не возвращаете обещание в GetUsersFromDatabase

2. @Phix Спасибо

3. Никаких проблем! Это происходит.