require
и module.exports
Одним из решений, которое сразу же выпрыгивает, является использование require
вместо child_process.fork
. Таким образом, импортированный код будет работать синхронно, и вы получите прямой вывод.
Пример:
function add() {
const a = require('a.js');
const b = require('b.js');
const c = require('c.js');
return a + b + c;
}
// or you can make it more usable
function addModules(...fileNames) {
return fileNames
.map(fileName => require(fileName))
.reduce((total, x) => total + x, 0);
}
Обратите внимание, что вам нужно будет , чтобы экспортировать результаты из этих файлов , если вы хотите их использовать.
// Do your stuff here:
const x = 42;
// Export it
module.exports = x;
Или вы можете использовать deasync
Deasync позволяет вам выполнять обещание синхронно, передавая ему эту функцию.
Пример:
const cp = require('child_process');
const deasync = require('deasync');
const fork = deasync(cp.fork);
function addPromise() {
const child_call = fork('process1.js');
// now synchronous
};
// repeat as needed
function add() {
const a = addPromise();
// ...
return a + b + c;
}
Примечание: deasync
раскрывает подробности реализации Node.js на уровне языка и поэтому не должен использоваться, если другие более безопасные решения не работают для вас.