2015-10-15 34 views
4

我有一種情況,我正在創建一個節點模塊,只有當異步操作完成時才返回。做到這一點的一種方法(如下所示)是爲module.exports分配一個帶有回調參數的函數。在函數內部,您將返回回調。瞭解module.exports與回調

這裏是什麼,我描述了一個例子,有做是回調:

// module called test.js 
module.exports = function(done) { 
    // do something asynchronous here 
    process.nextTick(function() { 
    done(); // call done when the asynchronous thing is complete... 
    } 
} 

當我收到掛了,是如何確實執行完成的回調,考慮到我沒有在任何地方定義它...

例如,在香草javascript中,我可以通過完成參數,然後在函數內調用它,只要我在調用中創建回調函數即可。

function testAsyncCb(msg, done) { 
    console.log(msg); 
    setTimeout(function() { 
    done(); 
    }, 1000); 
    console.log("last line in code"); 
} 

testAsyncCb("testing", function(){ console.log("done"); }); // invocation with callback function 

返回的第一個節點例如,某地需要()是()完成,以解決向右創建一個函數調用module.exports?如果不是,回調如何解析?

很難找到關於它如何工作的信息。任何幫助/方向表示讚賞。

回答

6

想到module.exports作爲對象(module.exports = {})。因此,無論你放置在物體上,任何需要模塊的人都可以看到它。

例如,你有

module.exports = function myFunc() {} 

然後要求這將意味着

var abc = require('./my-module'); --> abc == myFunc 

,如果你會做

module.export.myFunc = function() {} 

不是要求將

var abc = require('./my-module'); --> abc == {myFunc: function() {}} 

要求操作是同步的,而不是async中的異步(意味着不是AMD,但更像commonjs)。

看到http://www.sitepoint.com/understanding-module-exports-exports-node-js/ 爲也爲官方的NodeJS文檔的詳細信息 :https://nodejs.org/api/modules.html

+0

我更新的問題更加清晰。使用您的示例,我仍然不確定使用require時定義的回調的位置。所以如果abc = {myFunc:function(done){done(); }}在那裏完成定義? – shai

+0

你確實需要並取回一個功能。你可以調用這個函數。你看到的函數得到一個回調函數,所以只需要用cb作爲arg來調用它,但是仍然是導出本身是同步的,函數被定義並返回同步。如何在獲得後調用函數,取決於您。檢查我原來的帖子中的鏈接。 – sagie

+0

明白了 - 關鍵是像對待你提到的那樣對待require()函數。在更多地解析了一些代碼後,我意識到模塊正在被回調作爲參數調用,就像你在你的評論中提出的那樣require('./ some-module)(function(){}); – shai