理解module.exports与回调

sha*_*hai 4 javascript callback asynccallback node.js

我有一种情况,我正在创建一个仅在异步操作完成时返回的节点模块.一种方法(如下所示)是为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...
  }
}
Run Code Online (Sandbox Code Playgroud)

考虑到我没有在任何地方定义回调,我正在处理的是回调是如何完成的.

例如,在香草的​​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
Run Code Online (Sandbox Code Playgroud)

早在第一个节点例如,某地需要()是()完成,以解决向右创建一个函数调用module.exports?如果没有,回调如何解决?

很难找到有关其工作原理的信息.任何帮助/方向表示赞赏.

sag*_*gie 6

module.exports视为对象(module.exports = {}).因此,无论你向对象放置什么,都会公开显示给任何需要模块的人.

例如,你有

 module.exports = function myFunc() {} 
Run Code Online (Sandbox Code Playgroud)

然后要求这意味着

var abc = require('./my-module'); --> abc == myFunc
Run Code Online (Sandbox Code Playgroud)

如果你愿意的话

module.export.myFunc = function () {}
Run Code Online (Sandbox Code Playgroud)

超过要求

var abc = require('./my-module'); --> abc == {myFunc: function () {}}
Run Code Online (Sandbox Code Playgroud)

require操作是同步的,不像requirejs那样异步(意思不是AMD,而是更像commonjs).

看到http://www.sitepoint.com/understanding-module-exports-exports-node-js/ 更多信息也为官方的NodeJS文档:https://nodejs.org/api/modules.html