【问题标题】:Creating Callbacks for required modules in node.js在 node.js 中为所需模块创建回调
【发布时间】:2013-08-25 06:52:36
【问题描述】:

是否有可能在我自己创建的模块中创建某种回调?

我的问题是我为我的应用程序编写了一个模块。在这个模块中完成了一些任务,现在我的主应用程序应该得到模块完成任务的反馈。

以下描述了我想要但不会工作的东西...

//module mymod.js
function start()
{
    var done = false;

    //do some tasks
    done = true;
}
exports.done = done;

主应用

var mymod = require("./mymod.js");

while(!mymod.done)
{
    //do some tasks
}

如果有人可以帮助我,我会很高兴。

PS:我在这种情况下尝试了子进程(fork),但由于它似乎复制了整个进程,我无法再访问打开的 OpenCV 视频捕获... :( 通过使用模块,我没有遇到这个问题,而是我买了这个^^

【问题讨论】:

    标签: javascript node.js module ipc child-process


    【解决方案1】:

    是的,您可以从您的模块中获得回调。

    就这么简单

    function funcWithCallback(args, callback){
        //do stuff
    
        callback();
    }
    

    虽然我不知道您要完成什么,但 while 循环看起来很可疑。您可能应该从 npm 购买 async 包。

    async on github

    编辑:我觉得有必要澄清一些事情。虽然上述函数实际上确实打算使用回调而不是返回值,但它并不完全是异步的。

    真正的异步方法是这样做:

    function funcWithCallback(args, callback){      
        process.nextTick(function() {
            //do stuff
            callback();
        });     
    }
    

    这允许被调用的函数退出并将该函数的逻辑的执行推迟到下一个tick。

    【讨论】:

    • 哇,谢谢。我不认为这很容易 :D 顺便说一句:有没有办法动态写入模块中使用的变量?
    • @Fidel90 我不确定你的意思。另外,我觉得我应该澄清一些关于节点中异步回调的事情,所以我正在更新我的答案。
    • @Fidel90 语言是动态的,所以你可以选择传递和返回任何你喜欢的东西。
    【解决方案2】:

    回调语法:

    function start(callback)
    {
    
    
        //do some tasks
    
        callback(data);
    }
    
    exports.start = start;
    

    任何你需要你的模块的地方:

    var mymod = require("./mymod.js");
    
    mymod.start(function(data) {
       //do some tasks , process data
    
    });
    

    【讨论】:

    • 这是所有答案中我最容易理解的。解决了我的问题,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 2014-05-30
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    相关资源
    最近更新 更多