2015-04-28 23 views
6

Tôi mới trong nút js, Bây giờ tôi đang cố gắng đặt giá trị trả lại của truy vấn chọn trong mysql bằng nút js .... Tôi đang sử dụng nút-mysql gói ...không thể trả về giá trị truy vấn chọn bằng cách sử dụng mysql và nút js

mã ví dụ

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 luôn là undefined. Tôi biết đó là cuộc gọi không đồng bộ. bất cứ ai cho tôi biết làm thế nào để thiết lập giá trị cho biến này.

Cảm ơn Deepak

+0

Tại sao bạn muốn gán 'retValue' trong cả' processRow' và gọi lại của nó? – Lewis

+0

vừa thử .... nhưng tôi không thể đặt kết quả thành biến đó .... –

+0

http://stackoverflow.com/questions/5964988/how-to-get-the-results-from-nodejs-using -mysql-package help help – vanadium23

Trả lời

0

Các retvalue sẽ chỉ có trong phạm vi, mà đặt bạn trong kết quả secion. Vì vậy, bạn có thể làm một cái gì đó như thế để đăng nhập kết quả của bạn:

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

tôi không thể lấy kết quả ra khỏi phạm vi ... tôi muốn gán và trả về giá trị như thế này fucntion() getResults {... ... var retValue = undefined; var query = connection.query ('SELECT * FROM tblData;', hàm (err, kết quả, trường) {retValue = results;}); return retValue}; var ret = getResults(); console.log (ret); –

+0

@DeepakSamuel node.js đang làm việc trong phạm vi và người gọi lại. Đó là bản chất của anh ấy. Bạn có chắc là bạn cần triển khai mã theo cách này không? Bạn có thể thử đồng bộ hóa vars qua giao diện lời hứa. – vanadium23

+0

oh ... ok cảm ơn vì thông tin .... bạn có thể đưa bất kỳ ví dụ về prmoise? –

0

Di chuyển console.log bên function processRow(rows) để nó trông giống như

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

cũng thay đổi

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

Để

processRow(row); 

Tham số thứ hai không được sử dụng.

+0

tôi không thể nhận kết quả ngoài phạm vi ... tôi muốn chỉ định và trả lại giá trị như thế này fucntion() getResults {... ... var retValue = undefined; var query = connection.query ('SELECT * FROM tblData;', hàm (err, kết quả, trường) {retValue = results;}); return retValue}; var ret = getResults(); console.log (ret); –

+0

không hoạt động patrick .... console log luôn hiển thị kết quả .... nhưng tôi không thể lấy kết quả ra khỏi hàm –

+0

@DeepakSamuel bạn không thể lấy kết quả ra khỏi hàm. Đó chỉ là cách gọi lại không đồng bộ. Chúng được thực hiện _after_ phần bên ngoài được thực hiện, ngay cả phần bên ngoài sau khối chức năng. –

0

tôi không thể nhận được kết quả ra khỏi phạm vi ... i muốn gán và trả về giá trị như

fucntion này() {getResults ... ... var retValue = không xác định;

var truy vấn = connection.query ('SELECT * FROM tblData;', hàm (err, kết quả, trường) { retValue = results; });

trả lại retValue };

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

+0

Đây không phải là câu trả lời. –

1

Vì truy vấn cơ sở dữ liệu là một phép mở không đồng bộ, biến số retValue của bạn chưa được đặt tại thời điểm bạn gọi 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 
Các vấn đề liên quan