2015-10-13 95 views
0

我使用Meteor.JS和pcel:mysql从该方法获取mysql结果并将其传递给帮助程序。流星JS - 嵌套函数返回值不正确

在我的方法中,该方法执行得很好,并使用connection.query我能够在服务器端控制台中记录mysql行。

这是我的代码如下所示:

if (Meteor.isClient) { 

     Meteor.call('mysqltestcall1', function(error, result){ 
     Session.set('myMethodResult', result); 
     }); 

     Template.hello.helpers({ 
     data2: function(){ 
      return Session.get('myMethodResult'); 
     } 
     }); 

    } 

    if (Meteor.isServer) { 


    var connection = mysql.createConnection({ 
     host  : 'localhost', 
     user  : 'root', 
     password : '', 
     database : 'leaderboard' 
    }); 

    connection.connect(); 


    Meteor.methods({ 
    'mysqltestcall1': function(){ 
    var returnresult = 'test value'; 
    connection.query('SELECT * FROM players', function(err, rows, fields) { 
     if (err) throw err; 
     console.log(rows); 
     returnresult = rows; 
    }); 

    return returnresult; 
    } 

    }); 


    } 

我得到的值作为“测试值”,而不是行JSON数据。谁能帮我吗。

我的事情我没有正确使用该变量是在嵌套函数。

+0

裹此Meteor.call成Template.hello.onCreated功能 – Sindis

+0

我曾尝试这样的: \t \t Template.hello.onCreated(函数(){.......}); 但结果是一样的。 我认为这是我们的变量没有在嵌套函数中得到更新的东西。 – Manu

回答

0

看起来像connection.query是异步的,因此它没有时间执行,并立即返回默认的“returnresult”。 如果您在查询回调中移动return语句会怎么样?

connection.query('SELECT * FROM players', function(err, rows, fields) { 
    if (err) throw err; 
    console.log(rows); 
    return rows; 
}); 
+0

我也试过这个,但它也不能工作,谢谢你的评论。 – Manu