如何在类中返回.query的结果

时间:2013-07-16 21:23:19

标签: javascript node.js coffeescript node-mysql

我正在使用coffee脚本在NodeJS中编写应用程序,我需要将类生成的sql查询的结果存储到该类可以返回的变量中。

我有类似

的东西
class dataBase
  mySQL = require('mysql');
  connection = null;
  queryResults = null;

  constructor:(host,user,password,database)->
    connection = mySQL.createConnection({
      host : "#{host}",
      user : "#{user}",
      password : "#{password}",
      database : "#{database}",
    });

    connection.connect;

然后在类中我有一个名为query的函数,它查询数据库并返回结果。

query:(input) ->
  connection.query("#{input}",(err,result)->
    queryResults = result;
  );

  return queryResults;

问题是因为connection.query中的函数总是异步运行所以返回queryResults总是返回null。

无论如何我可以解决这个问题,这样如果我在类之外做一些事情,query()将返回结果的值,如:

myDatabase = new dataBase("fee","fi","foo","fum");
users = myDatabase.query("SELECT * FROM users");

1 个答案:

答案 0 :(得分:0)

在"异步"编程模型(AP),一个提供回调,其中使用查询的结果。类似的东西:

myDatabase = new dataBase("fee","fi","foo","fum");
myDatabase.query("SELECT * FROM users",function(err,result){
    // check for error and do something with result
});

AP的全部理念是,不是等待,而是在正常的程序流程之外发生事情 - 例如,当数据变得可用时 - 因此,你必须使用它们产生的任何结果可用。

这就是AP回调不返回值的原因。没有他们可以返回的背景。

想想就像通过邮局发送一封经过认证的信件一样。你把信寄给邮政人员,而不是等到信件送达并且收据可用,你去做其他的事情,留下指示,一旦收据在手,它应该送到你的房子或你应该被召唤去接你。

相关问题