С node.js только столкнулся . Вопрос который задам , наверное относится к избитым ,
но попробовав разные нагугленные варианты проблему решить не удалость.
Суть такова :
1) есть стандартный http сервер , получающий запрос и выдающий ответ
2) есть запрос к ms sql серверу за данными
3) данные успешно извлекаются , но как их передать ПОСЛЕ извлечения не знаю
4) пробовал делать задержку ( цикл for( var i... ){ timeout(); } )
5) ответ на sql запрос получают всегда после окончания работы функции
getMSSQLData , независимо от величины задержки , делал её для эксперимента
достаточно большой .
Вопросы :
1) не понимаю , почему ответ на sql запрос приходит ВСЕГДА после окончания работы
getMSSQLData , независимо от величины задержки , хоть секунда , хоть несколько минут .
Получается , что функция query(...) ставиться в какую-то очередь на выполнение,
а реальное выполнение начинается... КОГДА ?
2) пробовал "подождать" данные внутри getMSSQLData конструкцией типа
while( Line === '' ){} получал зависание
// стандартный http-сервер
...
var Response = httpDat.get(path);
response.writeHead( Response.Error , { 'Content-Type':Response.MIME } );
response.write( Response.Page );
response.end();
...
код был примерно такой :
function getMSSQLData(xServer , xDB , xUser , xPass , xQuery){
Line = '';
query(xServer , xDB , xUser , xPass , xQuery);
for( var i=0 ; i<10 ; i++ ){
timeout();
}
// while( Line === '' ){};
return( Line );
}
function query(xServer , xDB , xUser , xPass , xQuery){
sql.connect("...").then(function() {
new sql.Request().query("SELECT ... FROM ...").then(function(recordset) {
for( var i=0 ; i<recordset.length ; i++ ){
Line += recordset[i].DT + ' :: ' + recordset[i].Val + '\n';
}
console.log('result query:'+Line);
Flag = true;
});
});
}
function timeout(){
// несколько ненужных вычислений для формирования задержки
}
пробовал async , возможно неправильно , потому, что не помогло
Главный вопрос :
КАК ПРАВИЛЬНО ДОЖДАТЬСЯ ПОЛУЧЕНИЯ ДАННЫХ ОТ MS SQL и ПЕРЕДАТЬ ИХ В КАЧЕСТВЕ ОТВЕТА НА HTTP-запрос ?