2012-07-10 73 views
0

我想从数据库中检索唯一标识并将它们存储到对象中(userslist)。Node.js - 该功能不会返回从表中选择的数据

为什么我无法将数据检索到对象中? 对象userslist为空{}

我对Node.js的这一功能:

getOnlineUsers: function() 
    { 
     var userslist = {}; 

     client.query(
      'SELECT DISTINCT Aid FROM online', 
      function selectCb(err, results, fields) { 
       if (err) { 
        throw err; 
       } 

       if (results.length > 0) { 

        for (var i = 0; i < results.length; i++) { 
         var reader = results[i];       
         userslist[reader['Aid']] = { 
          fbid: reader['Aid'] 
         } 
        }  
       } 
      } 
      ); 
     return userslist; 
    } 
+3

如果你打算使用NodeJS,首先要学会处理异步代码。 – 2012-07-10 14:55:13

+0

对于任何严重的JavaScript也可以这么说。 – 2012-07-10 14:57:01

+0

如何更改此功能? – JohnMalcom 2012-07-10 15:00:07

回答

1

这里是什么在上面的评论中讨论的一个例子。

传递回调到getOnlineUsers ...

my_obj.getOnlineUsers(function(u_list) { 

    /* do something with the user list */ 

}); 

而且具有getOnlineUsers收到回调参数,并调用它...

// receive the callback----v 
getOnlineUsers: function(cb_func) { 

    client.query(
     'SELECT DISTINCT Aid FROM online', 
     function selectCb(err, results, fields) { 
      if (err) { 
       throw err; 
      } 

      var userslist = {} 

      if (results.length > 0) { 

       for (var i = 0; i < results.length; i++) { 
        var reader = results[i];       
        userslist[reader['Aid']] = { 
         fbid: reader['Aid'] 
        } 
       }  
      } 
      cb_func(userslist); // <-- invoke the callback, passing the data 
     }); 
} 

这是一个办法,但基本上说明了需要在传递给client.query的回调中继续执行代码流。