Вызов базы данных возвращает неопределенное обещание - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь написать API, который запрашивает базу данных MS sql. однако мой ответ от API всегда Promise { undefined }

app.get('/api/:year/:month', (req, res) => {
    var data = getData(req.params.month, req.params.year);
    console.log(data);
    res.send(data);
});

async function getData(m, y) {
    var query = "SELECT ...";
    sql.connect(Config, (err) => {
        if (err) {
            console.log("Error while connecting to database :- " + err);
        } else {
            var request = new sql.Request();
            request.query(query, function (err, rs) {
                if (err) {
                    console.log("Error while querying database :- " + err);
                } else {
                    return rs.recordset;
                }
                sql.close();
            })
        }
    })

Я предполагаю, что мне нужно как-то дождаться результата, как будто я регистрирую ответ внутри функции данных, которую он заполняет, однако я не могу Кажется, что-нибудь заставить работать.

1 Ответ

0 голосов
/ 03 марта 2020

Вы создаете функцию стиля обратного вызова, но на самом деле не принимаете значение. Вам нужно преобразовать его в обещание, основанное на этом, и использовать async / await

app.get("/api/:year/:month", async (req, res) => {
  const data = await getData(req.params.month, req.params.year);
  console.log(data);
  res.send(data);
});

async function getData(m, y) {
  const query = "SELECT ...";
  await sql.connect(Config);
  const request = new sql.Request();
  const rs = await request.query(query);
  return rs.recordset;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...