Показать сообщение отдельно
  #1 (permalink)  
Старый 17.03.2016, 11:14
Новичок на форуме
Отправить личное сообщение для zobretatel Посмотреть профиль Найти все сообщения от zobretatel
 
Регистрация: 02.12.2015
Сообщений: 5

как правильно дождаться данных
С 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-запрос ?
Ответить с цитированием