[英]callback is not a function node js
我是javascript的新手,我无法解决此错误。 我收到消息:“回调不是函数”:“return callback(rolesArray)”。
Rol.getAllRoles = function(callback){ sql = "select role from Role;"; var rolesArray = []; var role; mysql.connection(function(err,conn){ if (err){ return callback(err); } conn.query(sql,function(err,rows){ if (err){ return callback(err); } for(var i=0; i < rows.length; i++){ role = rows[i].role; rolesArray.push(rol); } console.log("roles: " + rolesArray); return callback(rolesArray); }); }); }
console.log输出:“roles:admin,customer”,因此与数据库的连接有效。
该错误意味着您在调用它时没有将函数传递给Rol.getAllRoles(fn)
。
另外,为了使你可以在回调中进行适当的错误处理,这样你就可以更容易地区分错误和实际数据,你应该总是将第一个参数传递给回调,指示是否存在错误,然后第二个参数(如果不是错误)可以是你的结果数组,如下所示:
Rol.getAllRoles = function(callback){
sql = "select role from Role;";
var rolesArray = [];
var role;
mysql.connection(function(err,conn){
if (err){
return callback(err);
}
conn.query(sql,function(err,rows){
if (err){
return callback(err);
}
for(var i=0; i < rows.length; i++){
role = rows[i].role;
rolesArray.push(rol);
}
console.log("roles: " + rolesArray);
// make sure the first argument to the callback
// is an error value, null if no error
return callback(null, rolesArray);
});
});
}
而且,你应该像这样称呼它:
Rol.getAllRoles(function(err, rolesArray) {
if (err) {
// handle error here
} else {
// process rolesArray here
}
});
这种在callback(err, data)
中调用异步回调的方式是一种非常常见的异步回调设计模式。 它允许所有呼叫者查看是否存在错误,以及是否没有错误来访问最终结果。
我建议如下:
Rol.getAllRoles = function(callback){ var sql = "select role from Role;"; var rolesArray = []; var role; callback = callback || function(){}; mysql.connection(function(err,conn){ if (err){ return callback(err); } conn.query(sql,function(err,rows){ if (err){ return callback(err); } for(var i=0; i < rows.length; i++){ role = rows[i].role; rolesArray.push(rol); } console.log("roles: " + rolesArray); return callback(rolesArray); }); }); }
这样您就强制执行该回调始终是一个函数。 如果你像Rol.getAllRoles()那样运行它,那么你以前会得到一个错误。 现在你不会。 你不会得到任何数据。
确保使用正确的参数调用Rol.getAllRoles(即:一个函数)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.