繁体   English   中英

回调不是函数节点js

[英]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.

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