0

我正在使用咖啡脚本在 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 中的函数总是异步运行,所以 return queryResults 总是返回 null。

无论如何我可以解决这个问题,如果我在类之外执行一些操作,query() 将返回结果的值,例如:

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

1 回答 1

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 回调不返回值的原因。他们没有可以返回的上下文。

把它想象成通过邮局发送一封认证信。你把你的信交给邮递员,而不是等到信送达和收据可用,你去做其他事情,留下指示,一旦收到收据,就应该把它送到你家或你应该被叫去接它。

于 2013-07-16T21:28:30.217 回答