javascript - 理解 module.exports 与回调

标签 javascript node.js callback asynccallback

我有这样一种情况,我正在创建一个仅在异步操作完成时才返回的 Node 模块。一种方法(如下所示)是为 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...
  }
}

我被挂断的地方在于回调 done 确实是如何执行的,考虑到我没有在任何地方定义它...

例如,在 vanilla 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

回到第一个 Node 示例,某处 require() 对 module.exports 的调用正在为 done() 创建一个函数以解析为正确?如果不是,回调是如何解决的?

很难找到有关其工作原理的信息。感谢任何帮助/指导。

最佳答案

module.exports 视为一个对象 (module.exports = {})。因此,无论您放入对象中的任何内容,都将对任何确实需要模块的人公开可见。

例如,你有

 module.exports = function myFunc() {} 

然后 require 就意味着

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

如果你愿意

module.export.myFunc = function () {}

比要求的要多

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

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

参见 http://www.sitepoint.com/understanding-module-exports-exports-node-js/ 了解更多信息 也适用于 nodejs 官方文档:https://nodejs.org/api/modules.html

关于javascript - 理解 module.exports 与回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33154102/

相关文章:

javascript - 如何延迟 for 循环并运行 Canvas 操作?

javascript - 如何使用 jquery 将 img src 字符串从以 _m 结尾更改为 _t 一组图像

javascript - slidingDown() 相互滑动时如何防止图像闪烁

node.js - 在 NodeJS 中操作数据的最佳方法是什么?

javascript - 在通过 javascript(也是谷歌地图)传递值之前等待循环完成。

android - Activity 通过回调将数据传递给 Fragment

c# - 从 HttpWebRequest.BeginGetResponse 回调获取数据

javascript - 我对 jquery 上下滑动有疑问

javascript - 如何在 Express 中创建临时端点

c++ - 使用 node.js 访问以 c++ 编写的 SDK