tl; dr mọi thứ xảy ra trong một cuộc gọi lại.
Bạn đang vấp phải tính chất không đồng bộ của Javascript. Theo thời gian console.log(value);
của bạn cuộc gọi chạy, truy vấn không (nhất thiết) hoàn thành. Vì vậy, không có cách nào để kết quả của truy vấn có sẵn tại thời điểm đó.
Nhiều nhà phát triển sử dụng một mẫu như thế này, với chức năng gọi lại để xử lý bước tiếp theo khi kết quả truy vấn đến.
function quo (success){
value = connection.query(
'SELECT role from `roles` where `id` = 1' ,
function (error, results, fields) {
if (error) throw error;
console.log('The role is: ', results[0].role);
success (results[0].role);
});
}
quo (function (role) {
console.log(role);
/* do something useful with the role that came back from the query */
});
Promise
các đối tượng làm cho loại thứ này dễ đọc hơn trong node.js. Nhưng dù sao thì việc giải thích chúng cũng nằm ngoài phạm vi của câu trả lời Stack Overflow.