我是javascript的新手,所以这可能是微不足道的。我试图根据Node JS / Restify的async模块的瀑布方法运行一系列函数。这种方法的主要优点是可以将当前回调的“结果”传递给下一个等等,有可能打破“瀑布”并运行下一个中间件。
如文档中所述,其参数是一系列函数和最后一个中间件。
所以我根据下面的代码设置我的功能并调用
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)
)
我得到了预期的结果,并且在函数1(fn1)的范围内定义了req对象。
所以我认为我遗漏了一些非常基本的东西,但不知道从哪里开始......
由于
答案 0 :(得分:1)
闭包在创建函数的范围内工作。不是它们执行的范围。例如,以下内容应该有效:
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();
});
});