失去与async.waterfall范围

我在JavaScript新,所以这可能是微不足道的。 我试图根据Node JS / Restify的asynchronous模块的瀑布方法来运行一系列函数。 这种方法的主要优点是可以将当前callback的“结果”传递给下一个等等,从而有可能打破“瀑布”并运行下一个中间件。

如文档中所述,它的参数是一组函数和最后一个中间件。

所以我根据下面的代码设置我的function,然后调用

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对象已被很好地定义。

所以我觉得我缺less一些相当基本的东西,但不是从哪里开始..

谢谢

闭包在函数创build的范围内工作,而不是它们在其中执行的范围。例如,以下应该工作:

 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(); }); });