Невозможно получить данные, используя mssql и hapi

  • все назначения примитивных типов, за исключением длинного и двойного
  • всех присвоений ссылок
  • всех присвоений изменчивых переменных
  • все операции java .concurrent.Atomic * classes
  • и, возможно, нечто большее. Посмотрите на jls .

    Как отмечено в комментариях, атомарность не означает видимости. Таким образом, в то время как другой поток гарантированно не видит частично написанного int, он никогда не увидит новое значение.

    Операции с длинными и двойными также находятся на общих 64-битных ЦПУ / g1], хотя нет никакой гарантии. См. Также этот запрос функции .

0
задан KVerwold 23 February 2019 в 11:48
поделиться

1 ответ

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

const Boom = require('boom');
const sql = require('mssql');
const dbConfig = require('../config/sql');

module.exports = [{
        method: 'GET',
        path: '/storeInfos',
        handler: async function (request, h) {
            return await storeInfos(request, h);
        }
    }
];

async function storeInfos(request, h) {
    let pool;
    try {
        pool = await sql.connect(dbConfig)
        let data = await pool.request()
            .query('select Id, Name from StoreInfo')

        if (!data || data.recordset.length == 0) {
            throw Boom.notFound();
        }
        return h.response(data.recordset);
    } catch (err) {
        throw Boom.internal(err.message);
    } finally {
        if (pool) {
            sql.close();
        }
    }
}

Вероятно, не самое элегантное решение, но оно работает. Я читал, что нет необходимости закрывать соединение с пулом, но если sql.close () не вызывается, возникает ошибка о том, что «Глобальное соединение уже существует» во второй раз, когда вызывается функция. [ 113]

0
ответ дан KVerwold 23 February 2019 в 11:48
поделиться