и, возможно, нечто большее. Посмотрите на jls .
Как отмечено в комментариях, атомарность не означает видимости. Таким образом, в то время как другой поток гарантированно не видит частично написанного int
, он никогда не увидит новое значение.
Операции с длинными и двойными также находятся на общих 64-битных ЦПУ / g1], хотя нет никакой гарантии. См. Также этот запрос функции .
Разобрался с этим и заставил его работать с помощью 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]