繁体   English   中英

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

[英]How do I return the results of .query in a class

我正在使用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:(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");

在“异步”编程模型(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回调不返回值的原因。 他们没有可以返回的背景。

想想它就像通过邮局发送一封经过认证的信件。 您将信件交给邮递员,而不是等到信件寄出并收到收据后再去做其他事情,留下指示,一旦收据到手,就应将其寄到您的房子或应该打电话给你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM