【问题标题】:understanding module.exports with callback用回调理解 module.exports
【发布时间】:2016-01-14 05:45:28
【问题描述】:

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

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

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

回到第一个节点示例,在某个地方, require() 对 module.exports 的调用正在为 done() 创建一个函数来解析正确吗?如果没有,回调是如何解决的?

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

【问题讨论】:

    标签: javascript node.js callback asynccallback


    【解决方案1】:

    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)。

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

    【讨论】:

    • 我更新了问题,使其更加清晰。使用您的示例,我仍然不确定使用 require 时在哪里定义了回调 get。所以如果 abc = {myFunc: function(done) { done(); }} 是在哪里定义的?
    • 您确实需要并取回一个函数。比你可以调用那个函数。我看到的你的函数有一个回调,所以只需用 cb 作为 arg 调用它,但是,导出本身是同步的,并且函数被定义并返回同步。获得后如何调用该函数,取决于您。检查我原始帖子中的链接。
    • 明白了——关键是将 require() 函数视为您提到的对象。在更多地解析了一些代码之后,我意识到模块被调用时使用回调作为参数,正如您在评论中所建议的那样 require('./some-module)( function( ){ });
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    相关资源
    最近更新 更多