我正在使用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");
答案 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回调不返回值的原因。没有他们可以返回的背景。
想想就像通过邮局发送一封经过认证的信件一样。你把信寄给邮政人员,而不是等到信件送达并且收据可用,你去做其他的事情,留下指示,一旦收据在手,它应该送到你的房子或你应该被召唤去接你。