2014-11-06 88 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