var mMysql = require('mysql');
function Select(aWhere,aCallback)
{
mConnection.query("select *from "+aWhere,
function (err, results, fields) {
return aCallback(results,fields);
});
}
另外一个类里调用处
mMySql.Select(tTableName,function (a_results,a_fields )
{
if(a_results.length!=0)
{
.....//省略若干
}
});
现象:同样的参数调用,有的时候程序正常,有的时候会提示a_results.length错误,原因是results 为undefined 是在是不知道是怎么回事,希望路过的高手指点下
13 回复
输出了一下error
{ [Error: connect ETIMEDOUT] code: 'ETIMEDOUT’, errno: 'ETIMEDOUT’, syscall: 'connect’, fatal: true }
看错误貌似是连接重连了,但是不清楚是什么原因造成的,
function Select(aWhere,aCallback) {
mConnection.query("select *from "+aWhere, function (err, results, fields) {
if (err) throw new Error('记得检查这个err变量,如果err不为null,results和fields可能为空的');
return aCallback(results,fields);
});
}
在Node.js中,大家基本上接受这样的约定:
- 回调函数的第一个参数用来表示是否出错(如果出错了则为出错信息,否则设置为null),第二个参数起才是返回值。
- 在回调函数内部,应该首先判断第一个参数(出错信息)是否不为空,如果回调是带有出错信息,那么后面的参数是不确定的(可能有,也可能没有)
- 如果不按照这种约定来做,你就为后面的程序挖了个很大的坑,不知道什么时候就一脚踩上去了
- 仔细看看Node.js内置模块的API文档,看看人家都是怎么做的