node.js回调是否必须在nonce函数中?若然,原因为何?

node.js回调是否必须在nonce函数中?若然,原因为何?,node.js,callback,Node.js,Callback,我非常努力地将代码模块化,到目前为止,我已经完成了避免回调地狱的工作。让我恼火的一件事是,当我传入一个回调函数时,它必须从一个nonce回调函数调用,就像这样 paramQuery(query, params, callback){ this.Handle.getConnection(function(err, Connection){ Connection.query(query, params, function(error, results, rows){

我非常努力地将代码模块化,到目前为止,我已经完成了避免回调地狱的工作。让我恼火的一件事是,当我传入一个回调函数时,它必须从一个nonce回调函数调用,就像这样

paramQuery(query, params, callback){
    this.Handle.getConnection(function(err, Connection){

        Connection.query(query, params, function(error, results, rows){             
            callback(error, results, rows); <-- this crap right here
        });

        Connection.release();
    });
}
paramQuery(查询、参数、回调){
this.Handle.getConnection(函数(err,Connection){
查询(查询,参数,函数(错误,结果,行){

回调(错误、结果、行);如果您正在创建的函数和要调用的函数具有相同的签名,则不需要包装函数,您可以传递函数本身。在您的情况下,它们都是
(错误、结果、行)
,因此这将起作用:

paramQuery(query, params, callback){
    this.Handle.getConnection(function(err, Connection){
        if(err){
            console.error("Could not connect to the Database:\n\n" + err.stack);
            process.exit(1);
        }

        Connection.query(query, params, callback);

        Connection.release();
    });
}
如果按照建议将
回调(错误,无论什么)
传递到
连接。query
,则会立即调用该函数,并将该函数的结果作为参数传递到
连接。query

可以传递回调变量(参数)从调用者到嵌套函数,而不声明或执行新函数。举个简单的例子:

var func1 = function(arg, cb) {
    func2(arg * 100, cb)
}

var func2 = function(arg, cb) {
    cb(arg * 20)
}

func1(4, function(result) {
    console.log(result)
    // 8000
})
示例中的不同之处在于,您正在执行回调(
callback()
),而不是将其作为参数(
callback
)传递:


因为…你是立即调用callbak而不是作为函数传递给查询?丢失
(…)
连接。查询(查询,参数,回调)
非常干净这很有意义。谢谢你。另外还有一个解释,虽然我也有一个,但有人对回调感到愤怒:)愤怒,愤怒反对回调!我们怎么敢写异步代码!考虑到讨论是关于node.js的,我想说我们敢。我们确实敢。>:d虽然你的答案是正确的,但我接受了@brandonscript,因为它更容易理解。不是针对个人的。
var func1 = function(arg, cb) {
    func2(arg * 100, cb)
}

var func2 = function(arg, cb) {
    cb(arg * 20)
}

func1(4, function(result) {
    console.log(result)
    // 8000
})
paramQuery(query, params, callback){
    this.Handle.getConnection(function(err, Connection){
        Connection.query(query, params, callback);
        Connection.release();
    });
}