2016-08-08 3 views
0

Еще новичок в nodejs не уверен, что я делаю неправильно здесь, я пытаюсь вернуть значение из этой функции. Однако переменная, которую я пытаюсь вернуть outhjk, всегда сбрасывается.Сброс значения переменной Nodejs

function executeQuery(stmt, data) { 
 
    var outhjk = ""; 
 
    pool.connect(function(err, client, done) { 
 
    if(err) { 
 
     console.error('error fetching client from pool', err); 
 
    } 
 
    client.query(stmt, data, function(err, result) { 
 
     //call `done()` to release the client back to the pool 
 
     done(); 
 

 
     if(err) { 
 
     return console.error('error running query', err); 
 
     } 
 
     outhjk = "just work please"; 
 
    }); 
 
    }); 
 
    return outhjk; 
 
}

+0

pool.connect примет ЛИТТ le time и последняя строка будут возвращены до ее выполнения из-за асинхронного характера. –

ответ

0

ваш запрос не работает в pool.connect его непосредственно возвращающегося вар = ""; Если вы используете последнюю версию node.js, вы можете использовать новое обещание ((разрешить, отклонить) => {}); , или если более старая версия использует модуль «async» или любой другой модуль для обработки асинхронных функций node.js

0

client.query является асинхронным. Оператор возврата: return outhjk; будет вызываться до того, как функция выполняется, так как возврат быстрее ...

Стандартный способ справиться с этим, чтобы использовать функцию обратного вызова:

function executeQuery(stmt, data, callback) { 
    var outhjk = ""; 
    pool.connect(function(err, client, done) { 
    if(err) { 
     console.error('error fetching client from pool', err); 
    } 
    client.query(stmt, data, function(err, result) { 
     //call `done()` to release the client back to the pool 
     done(); 

     if(err) { 
     return console.error('error running query', err); 
     } 
     outhjk = "just work please"; 
     callback(outhjk); 
    }); 
    }); 
} 

Затем вызвать функцию с обратный вызов, вы могли бы сделать что-то вроде этого:

var stmt = //stmt value here; 
var data = //data value here; 
executeQuery(stmt, data, function (outhjk) { 
    //here you can use outhjk 
}); 

Читать это, чтобы узнать суть от callbacks

Смежные вопросы