2015-04-28 4 views
6

Я новичок в узле js, теперь я пытаюсь установить возвращаемое значение select query в mysql с помощью узла js .... Я использую node-mysql пакет ...не может вернуть значение запроса select, используя mysql и node js

пример кода

var mysql = require('mysql'); 
var connection = mysql.createConnection({ 
    host : "localhost", 
    user : "root", 
    password: "root123", 
    database: "testdb" 
}); 

var retValue = undefined; 

var query = connection.query('SELECT * FROM tblData;'); 
query 
    .on('error', function(err) { 
     // Handle error, an 'end' event will be emitted after this as well 
    }) 
    .on('fields', function(fields) { 
     // the field packets for the rows to follow 
    }) 
    .on('result', function(row) { 
     // Pausing the connnection is useful if your processing involves I/O 
     connection.pause(); 
     processRow(row, function() { 
      retValue = row; 
     }); 
    }) 
    .on('end', function(row) { 

    }); 

    connection.end(); 

    function processRow(rows) 
    { 
     retValue = rows; 
    } 

    console.log(retValue); 

retValue всегда не определено. Я знаю, что это асинхронный вызов. кто-нибудь скажет мне, как установить значение для этой переменной.

Благодаря Дипак

+0

Почему вы хотите назначить 'retValue' как в' processRow', так и в обратном вызове? – Lewis

+0

только что пробовал .... но я не могу установить результат на эту переменную .... –

+0

http://stackoverflow.com/questions/5964988/how-to-get-the-results-from-nodejs-using -mysql-package возможная помощь – vanadium23

ответ

0

retvalue будет доступен только в объеме, что ваш положить в результате secion. Таким образом, вы можете сделать что-то подобное, чтобы войти ваш результат:

var connection = mysql.createConnection({ 
    host : "localhost", 
    user : "root", 
    password: "root123", 
    database: "testdb" 
}); 

var retValue = undefined; 

var query = connection.query('SELECT * FROM tblData;', function(err, results, fields) { 
    console.log(results); 
    // Here continue logic you needed with results from table 
}); 
+0

Я не могу получить результат из области действия ... Я хочу назначить и вернуть значение, подобное этому fucntion() getResults {... ... var retValue = undefined; var query = connection.query ('SELECT * FROM tblData;', function (err, results, fields) {retValue = results;}); return retValue}; var ret = getResults(); console.log (RET); –

+0

@DeepakSamuel node.js работают в области видимости и обратного вызова. Это его природа. Вы уверены, что вам нужно реализовать код таким образом? Вы можете попробовать синхронизировать vars через интерфейс обещаний. – vanadium23

+0

oh ... ok спасибо за информацию .... можете ли вы привести какой-нибудь пример prmoise? –

0

Перемещение console.log внутри function processRow(rows) так, что он выглядит как

function processRow(rows) 
{ 
    retValue = rows; 
    console.log(retValue); 
} 

также изменить

processRow(row, function() { 
    retValue = row; 
}); 

Для

processRow(row); 

Второй параметр не использовался.

+0

Я не могу получить результат из области действия ... Я хочу присвоить и вернуть значение, подобное этому fucntion() getResults {... ... var retValue = undefined; var query = connection.query ('SELECT * FROM tblData;', function (err, results, fields) {retValue = results;}); return retValue}; var ret = getResults(); console.log (RET); –

+0

не работает patrick .... консольный журнал всегда показывает результаты .... но я не могу получить результат из функции –

+0

@DeepakSamuel вы не можете получить результат из функции. Именно так работают асинхронные обратные вызовы. Они выполняются _after_ наружная часть выполняется, даже внешняя часть после функционального блока. –

0

я не могу получить результат выходит за рамки ... Я хочу, чтобы назначить и возвращает значение, как этот

fucntion() {getResults ... ... вар retValue = не определено;

var query = connection.query ('SELECT * FROM tblData;', function (err, results, fields) { retValue = результаты; });

возвращение retValue };

var ret = getResults(); console.log (ret);

+0

Это не ответ. –

1

Поскольку запрос базы данных является асинхронным, ваша переменная retValue еще не была настроена в то время, когда вы звоните console.log(retValue).

var retValue; 

var query = connection.query('SELECT * FROM tblData;'); 
query 
    .on('error', function(err) { 
     // Handle error, an 'end' event will be emitted after this as well 
    }) 
    .on('fields', function(fields) { 
     // the field packets for the rows to follow 
    }) 
    .on('result', function(row) { 
     // Pausing the connnection is useful if your processing involves I/O 
     connection.pause(); 
     processRow(row); 
     console.log(retValue); //retValue is now set 
    }) 
    .on('end', function(row) { 

    }); 

    connection.end(); 

    function processRow(rows) 
    { 
     retValue = rows; 
    } 

    console.log(retValue); // undefined, retValue has not been set yet