2014-11-06 58 views
0

其实我正在阅读Nodejs中的一些代码,但我不明白这是什么意思,因为我不太了解function的一些常见用法。有人能告诉我function(done)是什么意思吗?这是一个回调或什么?在js文件中,我看不到done的定义。由于在javascript中完成的功能

安第斯山脉

var getRedisUri = exports.getRedisUri = function (done) { 
if (process.env.CLUSTER_CONFIG_URI) { 
    return done(null, process.env.CLUSTER_CONFIG_URI); 
} 
//redis uri 
Fs.readFile(
    '/opt/redis_uri', 
    {encoding: 'utf8'}, 
    function (err, redis_uri_data) { 
     if (err) {return done(err);} 

     var redis_uri = redis_uri_data.toString(); 


     if (process.env.NODE_ENV !== 'production' && 
      process.env.VM_DOMAIN && 
      (redis_uri.indexOf('localhost') !== -1 || redis_uri.indexOf('127.0.0.1') !== -1)) { 
      redis_uri = redis_uri.replace('localhost', process.env.VM_DOMAIN); 
      redis_uri = redis_uri.replace('127.0.0.1', process.env.VM_DOMAIN); 
     } 

     done(null, redis_uri); 
    }); 
}; 
+3

这只是一个标准的Node.js回调。你知道回调是如何工作的吗? – 2014-11-06 03:51:01

+0

嗨,turrle。我可以理解回调,但我无法找到done函数的位置。我怎么找到它?在IDE中我找不到它。 – wiwengweng 2014-11-06 06:20:18

回答

1

这行是一个函数定义的仅仅是开始。 function(done)只是意味着当调用这个函数时,它应该用一个参数来调用,并且在函数执行期间,该参数将被称为done

更具体地说,我认为它与中间件有关(你在这里使用express.js吗?)。如果你有一大堆中间件函数,快速路由器会为你调用这些函数,并且传入一个函数作为参数,当被调用时它将请求传递给下一个中间件函数。这似乎是这里发生的事情,因为done在函数结束时被调用。

Node.js有这样的东西,因为它都是异步的,所以你不能使用return语句。

+0

谢谢拉斐尔。我不认为我有express.js,因为我的lib中没有这个js库。它可能是什么?我无法跳到IDE中的'done' var,它只是显示这个'done'是一个变种。没有更多的提示。 – wiwengweng 2014-11-06 06:23:00

+0

通过阅读代码可能并不明显。你应该阅读redis文档。 – 2014-11-06 17:21:23