node.js回调是否必须在nonce函数中?若然,原因为何?
我非常努力地将代码模块化,到目前为止,我已经完成了避免回调地狱的工作。让我恼火的一件事是,当我传入一个回调函数时,它必须从一个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){
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();
});
}