【问题标题】:How to get a value from mysql query outside the query statement?如何从查询语句之外的mysql查询中获取值?
【发布时间】:2018-05-23 15:28:05
【问题描述】:

这里是console.log下面的函数

function quo (value){
    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);// result here The role is : admin
          });
    console.log(value);
}

这里的结果是查询对象 Query {domain:null,_events:{error: .. etc} ##

我这样调用它:

quo();

【问题讨论】:

标签: mysql node.js


【解决方案1】:

tl;dr一切都发生在回调中。

您对 Javascript 的异步特性感到困惑。在您的console.log(value); 调用运行时,查询尚未(必然)完成。因此,当时无法获得查询结果。

许多开发者使用这样的模式,当查询结果到达时,带有回调函数来处理下一步。

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 对象使这种东西在 node.js 中更容易阅读。但无论如何解释它们超出了 Stack Overflow 答案的范围。

【讨论】:

  • 谢谢,它非常有用.. 我的主要目标是使用数据库记录检查用户的登录值.. 这样我就可以将这个值从查询本身传递出去
【解决方案2】:
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 */
});

【讨论】:

    猜你喜欢
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    相关资源
    最近更新 更多