Получение значений из базы данных с использованием узла и mssql - PullRequest
0 голосов
/ 07 мая 2019

Вот простой скрипт, который я сделал:

const Nightmare = require('nightmare');
const sql = require('mssql');
const itens = getRecords();

async function getRecords(){
    let itensList = [];
    const cfg = {
      //config here
    };
    sql.connect(cfg, function(err){
        if(err) console.log(err);
        let request = new sql.Request();
        request.query("<query here>", (err, result) => {
            if(err) console.log(err);
            itensList = result;
        });
        return itensList;
    });
}

async function getPrices(){
    try{
        console.log(itens)
    }catch(e){
        console.log(e);
    }
}

getPrices();

Все работает, но когда вызывается функция getPrices (), вот что регистрируется:

Promise { undefined }

Что мне здесь не хватает?

1 Ответ

0 голосов
/ 07 мая 2019

request.query вызывается, но itenslist возвращается, прежде чем он может быть назначен.

По сути, порядок происходящего:

  1. request.query вызывается и начинает выполнение запроса.
  2. Поскольку request.query является асинхронным, мы переходим к следующей задаче - возвращаем itenlist
  3. request.query завершает работу и присваивает itenlist ожидаемое значение после того, как оно уже было возвращено.

Чтобы получить желаемую функциональность, я бы рекомендовал использовать обратные вызовы (которые поддерживает node-mssql). Кроме того, вы можете использовать ключевое слово await. Например:

var queryText = 'SELECT 1 AS Value';
var queryResults = await connection.query(queryText);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...