2015-04-28 10 views
6

Jestem nowy w js węzłów, teraz próbuję ustawić wartość zwracaną kwerendy wybierającej w mysql przy użyciu js węzłów .... Używam node-mysql pakiet ...nie może wrócić wybraną wartość zapytań MySQL i węzeł js

przykład kodu

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 zawsze jest niezdefiniowany. Wiem, że jest to wywołanie asynchroniczne. każdy mówi mi, jak ustawić wartość dla tej zmiennej.

Dzięki Deepak

+0

Dlaczego chcesz przypisać 'retValue' zarówno do' processRow', jak i do wywołania zwrotnego? – Lewis

+0

prostu próbowałem .... ale nie mogę ustawić wynik tej zmiennej .... –

+0

http://stackoverflow.com/questions/5964988/how-to-get-the-results-from-nodejs-using -mysql-pakiet możliwa pomoc – vanadium23

Odpowiedz

0

retvalue będzie dostępny tylko w zakresie, który swoim umieścić w wyniku secion. Więc można zrobić coś takiego, aby zalogować swój wynik:

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

nie mogę uzyskać wynik z zakresu ... chcę, aby przypisać i zwrócić wartość jak ten fucntion() {... ... getresults var retValue = nieokreślone; var query = connection.query ('SELECT * FROM tblData;', funkcja (err, wyniki, pola) {retValue = wyniki;}); return retValue}; var RET = getresults(); console.log (ret); –

+0

@DeepakSamuel node.js pracują w zasięgach i wywołaniach callback. To jego natura. Czy na pewno potrzebujesz zaimplementować kod w ten sposób? Możesz spróbować zsynchronizować vary za pomocą interfejsu obietnicy. – vanadium23

+0

oh ... ok, dzięki za informacje........ .Czy możesz umieścić przykład prmoise? –

0

Przesuń console.log wewnątrz function processRow(rows) tak, że wygląda jak

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

również zmienić

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

Aby

processRow(row); 

Drugi parametr nie był używany.

+0

Nie mogę uzyskać wyniku poza zakresem ... chcę przypisać i zwrócić wartość podobną do tej fucntion() getResults {... ... var retValue = undefined; var query = connection.query ('SELECT * FROM tblData;', funkcja (err, wyniki, pola) {retValue = wyniki;}); return retValue}; var RET = getresults(); console.log (ret); –

+0

nie działa patrick .... log konsoli zawsze pokazują wyniki .... ale nie mogę uzyskać wyniku z funkcji –

+0

@DeepakSamuel nie można uzyskać wynik z funkcji. Tak działają asynchroniczne wywołania zwrotne. Są wykonywane po tym, gdy część zewnętrzna zostanie wykonana, nawet część zewnętrzna za blokiem funkcyjnym. –

0

nie mogę uzyskać wynik z zakresu ... Chcę, aby przypisać i zwrócić wartość jak ten

fucntion() getresults { ... ... var retValue = nieokreślone;

var query = connection.query ('SELECT * FROM tblData;', funkcja (err, wyniki, pola) { retValue = wyniki; });

powrotu retValue };

var RET = getresults(); console.log (ret);

+0

To nie jest odpowiedź. –

1

Ponieważ zapytanie do bazy danych jest uruchomieniem asynchronicznym, zmienna retValue nie została jeszcze ustawiona w chwili wywoływania 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