На данный вопрос уже ответили:
Есть функция. Сервер node.js должен вернуть результат sql-запроса, но из-за асинхронной природы js у меня не получается вернуть результат через то что не успевает отработать база. До этого работал с синхронными языками у меня беда.
function getCollections()
{
res = 0;
var conn = new sql.Connection(dbConfig);
conn.connect().then(function (recordset)
{
var req = new sql.Request(conn);
req.query("SELECT * FROM Collections").then(function (recordset)
{
conn.close();
res = recordset;
})
.catch(function (err)
{
console.log(err);
conn.close();
})
})
.catch(function (err)
{
console.log(err);
});
while (res === 0) { console.log(1);}
}
app.get("/", function (request, response) {
var res = getCollections();
response.send(res);
});
Ваша библиотека для работы с базой данных позволяет вам писать Promise-like код. Так почему бы просто не вернуть Promise из getCollections
?
Например вот так:
function getCollections() {
var conn = new sql.Connection(dbConfig);
return conn.connect().then(function (recordset) {
var req = new sql.Request(conn);
return req.query("SELECT * FROM Collections").then(function (recordset) {
conn.close();
return Promise.resolve(recordset);
}).catch(function (err) {
conn.close();
return Promise.reject(err);
});
});
}
Тогда функция обработки запроса могла бы иметь вид:
app.get("/", function (request, response) {
getCollections().then(function (records) {
response.json(records);
}).catch(function (error) {
response.status(500).json({error: error.toString()});
});
});
Закиньте response.send(res); в getCollections. Например:
getCollections(request, response);
а в `req.query("SELECT * FROM Collections").then(function (recordset)
conn.close();
res = recordset;
response.send(res);
а в catch's 400
response.statusCode = 400;
response.setHeader('Content-Type', 'application/json');
response.send(JSON.stringify({status:'error', message: 'some error'}));
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть папка с HTML-ФайламиПросто папка, лежащая прямо у пользователя, без вебсервера