2013-08-21 49 views
17

tôi có chức năng sau đó được một hexcode từ cơ sở dữ liệuNode.js trở về kết quả từ truy vấn MySQL

function getColour(username, roomCount) 
{ 
    connection.query('SELECT hexcode FROM colours WHERE precedence = ?', [roomCount], function(err, result) 
    { 
     if (err) throw err; 
     return result[0].hexcode; 
    }); 
} 

Vấn đề của tôi là tôi đang trở về kết quả trong hàm callback nhưng chức năng getColour không trả lại bất cứ thứ gì. Tôi muốn hàm getColour trả về giá trị result[0].hexcode.

Tại thời điểm khi tôi gọi getColour nó không trả lại bất cứ điều gì

Tôi đã cố gắng làm điều gì đó như

function getColour(username, roomCount) 
{ 
    var colour = ''; 
    connection.query('SELECT hexcode FROM colours WHERE precedence = ?', [roomCount], function(err, result) 
    { 
     if (err) throw err; 
     colour = result[0].hexcode; 
    }); 
    return colour; 
} 

nhưng tất nhiên các truy vấn SELECT đã hoàn thành vào thời điểm đó trả về giá trị trong colour

Trả lời

37

Bạn phải thực hiện xử lý trên các kết quả từ truy vấn db chỉ trên một cuộc gọi lại. Giống như.

function getColour(username, roomCount, callback) 
{ 
    connection.query('SELECT hexcode FROM colours WHERE precedence = ?', [roomCount], function(err, result) 
    { 
     if (err) 
      callback(err,null); 
     else 
      callback(null,result[0].hexcode); 

    }); 

} 

//call Fn for db query with callback 
getColour("yourname",4, function(err,data){ 
     if (err) { 
      // error handling code goes here 
      console.log("ERROR : ",err);    
     } else {    
      // code to execute on data retrieval 
      console.log("result from db is : ",data); 
     }  

}); 
+0

Cảm ơn mặc dù tôi vẫn có cùng một vấn đề mà tôi không thể gán kết quả của các cuộc gọi lại cho một biến (ví dụ: var color = getColour (... - Đây có phải là có thể – Pattle

+0

'var color = getColour (Nhưng bạn vẫn có thể giữ màu như là một biến toàn cầu và đặt nó từ gọi lại.Nhưng nếu bạn muốn kích hoạt mọi thứ khi hoàn thành việc tìm nạp db, bạn phải đặt chúng trong hàm gọi lại – mithunsatheesh

+0

thnak bạn @mithunsatheesh. Làm thế nào tôi có thể truy cập dữ liệu từ bên ngoài getColour? – Diamond