Javascript 理解module.exports与回调

Javascript 理解module.exports与回调,javascript,node.js,callback,asynccallback,Javascript,Node.js,Callback,Asynccallback,在这种情况下,我创建的节点模块仅在异步操作完成时返回。一种方法(如下所示)是分配module.exports一个带有回调参数的函数。在函数内部,您将返回回调 下面是我描述的一个示例,其中done是回调: // module called test.js module.exports = function(done) { // do something asynchronous here process.nextTick(function() { done(); // call

在这种情况下,我创建的节点模块仅在异步操作完成时返回。一种方法(如下所示)是分配module.exports一个带有回调参数的函数。在函数内部,您将返回回调

下面是我描述的一个示例,其中done是回调:

// 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中,只要在调用中创建回调函数,我就可以将done作为参数传递,然后在函数中调用它

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
回到第一个节点示例中,require()对module.exports的调用正在创建一个函数,让done()解析为right?如果没有,回调如何解析


很难找到这是如何工作的信息。感谢您提供的任何帮助/指导。

请将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 () {}}
require操作是同步的,不像requirejs中的异步(意思不是AMD,而是更像commonjs)

看 更多信息
同样对于nodejs官方文档:

我更新了问题,使其更加清晰。使用您的示例,我仍然不确定在使用require时在哪里定义了回调get。所以,如果abc={myFunc:function(done){done();}}}在哪里定义完呢?您需要并返回一个函数。然后你可以调用这个函数。我看到的函数得到了回调,所以只需使用cb作为arg调用它,但是导出本身是sync的,并且函数是定义并返回sync的。得到函数后如何调用该函数取决于您。检查我的原始帖子中的链接。明白了-关键是像你提到的那样,将require()函数当作对象对待。在进一步解析一些代码之后,我意识到正在使用回调作为参数调用模块,正如您在注释中所建议的那样,如so require('./some module)(function(){});