gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 04:40:25 24 4
gpt4 key购买 nike

假设我有一个 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 发送给 child 后会变成 undefined

JSON.stringify有关系吗?

最佳答案

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
});
});
});

关于javascript - 如何将函数/回调传递给 Node.js 中的子进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28037647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com