2015-10-15 142 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