Javascript async.瀑布失去作用域
我不熟悉javascript,所以这可能是一件微不足道的事情。我正在尝试根据节点JS/Restify的异步模块的瀑布方法来运行一系列函数。这种方法的主要优点是可以将当前回调的“结果”传递给下一个回调,这样就有可能打破“瀑布”并运行下一个中间件 如文档中所述,它的参数是一个函数数组和最后一个中间件 因此,我根据下面的代码设置函数并调用Javascript async.瀑布失去作用域,javascript,jquery,node.js,asynchronous,express,Javascript,Jquery,Node.js,Asynchronous,Express,我不熟悉javascript,所以这可能是一件微不足道的事情。我正在尝试根据节点JS/Restify的异步模块的瀑布方法来运行一系列函数。这种方法的主要优点是可以将当前回调的“结果”传递给下一个回调,这样就有可能打破“瀑布”并运行下一个中间件 如文档中所述,它的参数是一个函数数组和最后一个中间件 因此,我根据下面的代码设置函数并调用 var fn1 = function(callback){ console.log(req.params.user_id); callback(nu
var fn1 = function(callback){
console.log(req.params.user_id);
callback(null, req.params.user_id);
};
var fn2 = function(user_id, callback){
console.log(user_id);
callback();
}
server.get('/:user_id',
function(req, res, next){
async.waterfall([fn1, fn2],
function(err, result){
next();
})
},
...(next middleware)
)
我没有得到预期的结果,因为没有定义req对象。但是,在执行此操作时:
server.get('/:user_id',
function(req, res, next){
async.waterfall([
function(callback){
console.log(req.params.user_id);
callback(null, req.params.user_id);
},
function(user_id, callback){
console.log(user_id);
callback();
}
],
function(err, result){next()});
},
...(next middleware)
)
我得到了预期的结果,并且req对象在函数1(fn1)的范围内得到了很好的定义
所以我想我错过了一些基本的东西,但不知道从哪里开始
谢谢闭包在创建函数的范围内工作。而不是执行它们的范围。例如,以下各项应起作用:
server.get('/:user_id', function(req, res, next) {
var fn1 = function(callback){
console.log(req.params.user_id);
callback(null, req.params.user_id);
};
var fn2 = function(user_id, callback){
console.log(user_id);
callback();
}
async.waterfall([fn1, fn2],
function(err, result){
next();
});
});