@zakharoffam
Начинающий

Функция возвращающая данные полученные из БД, как правильно написать?

Нужно написать функцию, которая принимает строку SQL-запрос, и возвращает массив полученных из БД данных. Добился только чтобы данные выводились в консоль внутри функции, но как сделать чтобы функция возвращала данные не могу понять. Код:
const Connection = require('tedious').Connection;
const Request = require('tedious').Request;
const { request } = require('http');
const config = require('./config_db');

const connection = new Connection(config);
connection.on('connect', (err) => {err ? console.log(err) : select(query)});

const select = (query) => {
    request = new Request(query);
    request.on('row', (columns) => {
        columns.map(column => {
            console.log(column.value)
        })
    })
    connection.execSql(request)
    return request
};

module.exports = select;


Но такая функция ничего не возвращает.

Я добился чтобы возврат был, но очень большим костылем, типа такого:
const Connection = require('tedious').Connection;
const Request = require('tedious').Request;
const { request } = require('http');
const config = require('./config_db');
const addState = require('./state').addState; // функция делает push в state


const connection = new Connection(config);
connection.on('connect', (err) => {err ? console.log(err) : select(query)});

const select = (query) => {
    request = new Request(query);
    request.on('row', (columns) => {
        columns.map(column => {
            addState(column.value)
        })
    })
    connection.execSql(request)
    const state = require('./state').state // импортирую именно сдесь, потому что если импортировать раньше вернется пустой state
    return state
};

module.exports = select;

Так он еще срабатывает только на второй раз. :)
Как сделать, чтобы функция возвращала данные?
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ответы на вопрос 1
bingo347
@bingo347 Куратор тега Node.js
Crazy on performance...
const select = (query) => new Promise((resolve, reject) => {
  const request = new Request(query);
  request.once('error', reject);
  request.once('done', (rowCount, more, rows) => {
    resolve(rows.map(
      columns => columns.map(
        column => column.value
      )
    ));
  });
  connection.execSql(request);
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы