如何在Node.js中将函数/回调传递给子进程?

套件

假设我有一个parent.js包含名为parent

var childProcess = require('child_process');

var options = {
    someData: {a:1, b:2, c:3},
    asyncFn: function (data, callback) { /*do other async stuff here*/ }
};

function Parent(options, callback) {
    var child = childProcess.fork('./child');
    child.send({
        method: method,
        options: options
    });
    child.on('message', function(data){
        callback(data,err, data,result);
        child.kill();
    });
}

同时在 child.js

process.on('message', function(data){
    var method = data.method;
    var options = data.options;
    var someData = options.someData;
    var asyncFn = options.asyncFn; // asyncFn is undefined at here
    asyncFn(someData, function(err, result){
        process.send({
            err: err,
            result: result
        });
    });
});

我想知道Node.js中是否不允许将函数传递给子进程。

为什么将其发送到后asyncFn变成undefinedchild

有关系JSON.stringify吗?

mscdex

JSON不支持序列化功能(至少开箱即用)。您可以先(通过asyncFn.toString()将函数转换为其字符串表示形式,然后在子进程中再次重新创建该函数。但是,问题在于您在此过程中失去了范围和上下文,因此您的功能实际上必须是独立的。

完整的例子:

parent.js

var childProcess = require('child_process');

var options = {
  someData: {a:1, b:2, c:3},
  asyncFn: function (data, callback) { /*do other async stuff here*/ }
};
options.asyncFn = options.asyncFn.toString();

function Parent(options, callback) {
  var child = childProcess.fork('./child');
  child.send({
    method: method,
    options: options
  });
  child.on('message', function(data){
    callback(data,err, data,result);
    child.kill();
  });
}

child.js

process.on('message', function(data){
  var method = data.method;
  var options = data.options;
  var someData = options.someData;
  var asyncFn = new Function('return ' + options.asyncFn)();
  asyncFn(someData, function(err, result){
    process.send({
      err: err,
      result: result
    });
  });
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Node.js中将变量传递给预定义的回调函数

如何在JavaScript中将变量传递给回调函数

如何在express中将参数传递给回调函数?

如何在Python中将参数传递给回调函数?

如何在Node.js中将参数传递给mysql查询回调

如何在node.js子进程模块中将消息以及stdout从子进程传递到父进程?

如何将回调函数传递给子组件?

React - 如何在回调函数中将参数从子级传递给父级(onClick)

如何在Javascript .filter()方法中将额外的参数传递给回调函数?

如何在Android中将不同的回调传递给相同的函数

如何在Node.js 8.10v中将参数传递给事件对象AWS Lambda函数

如何在puppeteer的$ eval中将变量传递给回调?

如何在flutter中将参数传递给回调?

如何将其他参数传递给node.js中的封装回调函数

如何将STDIN传递给node.js子进程

如何在Node.js中将“ CTRL + C”发送到子进程?

如何在Java子中将Java对象传递给Java函数

如何在反应中将自定义onClick函数从父级传递给子级

如何在React中将componentDidMount函数传递给深层子级

如何在React Navigation 5中将父函数传递给子屏幕?

如何在Node.js环境中将查询语句传递给bigquery

如何在node.js中执行回调函数?

如何在回调函数Node JS中打破for循环

如何在 Vue.js 中将数据从父组件传递给子组件?

如何在Kotlin中将函数传递给函数

如何在方法函数中将参数传递给vue.js路由器?

如何在Knockout.js绑定中将当前元素传递给Javascript函数?

如何在Vue Js中将动态函数名称传递给click事件

如何在Ajax调用中将函数从JQuery传递到Node.JS服务器