javascript - async.waterfall 失去了范围

标签 javascript jquery node.js asynchronous express

我是 javascript 新手,所以这可能是一件微不足道的事情。我正在尝试根据 Node JS/Restify 异步模块的 waterfall 方法串联运行一组函数。此方法的主要优点是可以将当前回调的“结果”传递给下一个回调,依此类推,有可能打破“waterfall ”并运行下一个中间件。

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

所以我根据下面的代码设置我的函数并调用

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

关于javascript - async.waterfall 失去了范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27415400/

相关文章:

javascript - 如何获取 Fabric JS 中形状的坐标?

javascript - 动态填充列表

node.js - Node-sass 返回一个慢速缓冲区。这是什么以及如何将其转换为 CSS?

node.js - 如何在 node.js 中使用 wcf?

javascript - 函数不传参给onclick

javascript - 无法使用 $(this).val ("") 清空值;

javascript - 如何选择包含 DOM 元素的某个类的元素的第一个实例

javascript - 我究竟如何从这个巨大的 JSON 对象中获取单个值?

node.js - Docker:开发和生产环境的最佳实践

javascript - 将 JQuery 转换为 addEventListener 用于按键事件