Асинхронную функцию сделать синхронной
Занимаюсь сервером на Node.JS версии 5.12 в связке с Mssql 3.3.0. Вынужден работать со старыми версиями т.к. сервер должен работать на Win XP. Суть: Есть функция запроса к базе, которая работает асинхронно:
function ExecSQL(sql, callback){
console.log(sql);
try{
var request = new mssql.Request(connection);
request.query(sql, function(recordset, err){
callback.call(recordset, err);
});
}catch(error){
console.dir(error);
callback.call(null, error);
}
}
Мне нужно сделать возможность ее использования синхронно, т.е. с блокировкой выполнения (в т.ч. и для удобства). Делаю так:
function ExecSQLSync(sql){
allowContinue = false;
result = null;
new mssql.Request(connection).query(sql).then(function(recordset) {
console.log(2);
result = recordset;
console.dir(recordset);
allowContinue = true;
}).catch(function(err) {
console.dir(err);
});
console.log(1);
while (!allowContinue){}
console.log(3);
return result;
}
Задумка: ставлю флаг "разрешено выполнять далее" в false и выполняю асинхронно запрос в другом потоке, после чего начинаю ждать установку флага в true, и после чего возвращаю результат ее выполнения. По замыслу в консоли должны появляться записи поочередно 1 2 и 3. На деле я вижу исключительно только 1. Колбек не отрабатывает. Если ставлю флаг сразу в true, то все работает, но ни о какой синхронности, разумеется, говорить не приходится. В консоли я вижу 1 3 и 2, что и следует ожидать в таком случае.
P.S.: Оговорюсь - я слабо осведомлен с устройством Node.JS, и как работает асинхронность.