从函数内部运行NodeJS REPL



我有一个程序,可以根据请求输入命令以不同的模式运行。我正在构建的模式之一是NodeJS REPL服务器。因此,我做了以下操作,当请求REPL模式时调用运行函数:

export function run() {
// do some stuff
repl.start({
prompt: '> ',
eval: (cmd, context, filename, callback) => {
console.log(`receive: ${cmd}`);
callback(null, JSON.parse(cmd));
}
});
}

问题是,这样做,REPL服务器会正常启动,但随后会立即结束。然而,如果我在一个独立文件中执行以下操作,并使用node standalonefile.js启动它,它将按预期工作。

repl.start({
prompt: '> ',
eval: (cmd, context, filename, callback) => {
console.log(`receive: ${cmd}`);
callback(null, JSON.parse(cmd));
}
});

我实际上使用Promise解决了这个问题。当整个过程结束时,它也结束了REPL过程。在这里,我等待承诺的解决,然后结束整个事情。

export function run() {
return new Promise<void>((resolve, reject) => {
// do some stuff
const server = repl.start({
prompt: '> ',
eval: (cmd, context, filename, callback) => {
console.log(`receive: ${cmd}`);
callback(null, JSON.parse(cmd));
}
});
server.on('exit', () => {
resolve();
});
});
}

最新更新