Асинхронную функцию сделать синхронной

Занимаюсь сервером на 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, и как работает асинхронность.


Ответы (0 шт):