为node.js中的所需模块创建回调

Fid*_*l90 1 javascript ipc module child-process node.js

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

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

以下描述了我想要但不会做的事情......

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

    //do some tasks
    done = true;
}
exports.done = done;
Run Code Online (Sandbox Code Playgroud)

主要应用

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

while(!mymod.done)
{
    //do some tasks
}
Run Code Online (Sandbox Code Playgroud)

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

PS:我尝试了这种情况的子进程(fork),但因为它似乎复制整个过程我不能再访问打开的OpenCV视频捕获...... :(通过使用模块我不会遇到这个问题,但我得到这个一个为它^^

Jos*_* C. 9

是的,您可以从模块进行回调.

这很简单

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

    callback();
}
Run Code Online (Sandbox Code Playgroud)

虽然我不知道你想要完成什么,但while循环看起来很可疑.您可能应该从npm投资异步包.

github上的async

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

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

function funcWithCallback(args, callback){      
    process.nextTick(function() {
        //do stuff
        callback();
    });     
}
Run Code Online (Sandbox Code Playgroud)

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


Or *_*Ron 6

回调语法:

function start(callback)
{


    //do some tasks

    callback(data);
}

exports.start = start;
Run Code Online (Sandbox Code Playgroud)

您需要模块的任何地方:

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

mymod.start(function(data) {
   //do some tasks , process data

});
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说是最容易理解的所有答案.解决了我的问题,谢谢! (2认同)