将 Node.js 的 REPL eval 与异步函数一起使用

Using Node.js's REPL eval with an async function

我正在使用 Node.js REPL module 来实现 REPL。

这是我启动 REPL 的方式:

const cli = repl.start({ eval: evals });

我有一个函数 answer,它接受一些参数和 returns 答案。 answer 是异步的。 evals 是一个函数,它将 REPL 对 eval 函数的需求与我的 answer 函数所提供的联系起来。 evals 看下面

const evals = (command, context, file, callback) => {
  (async () =>
    callback(null, await answer(command, arg1))
  )()
};

现在,好消息是,它有效。但这看起来比它需要的要复杂得多。我是否遗漏了一些方法来简化维护工作?

(这里是code in context)

我认为让 evals 函数直接异步应该可行:

const evals = async (command, context, file, callback) => {
    callback(null, await answer(command, arg1));
};

或者你可以避开async/await,直接使用Promise.then;在这种情况下可能更清楚:

const evals = (command, context, file, callback) => {
    answer(command, arg1)
        .then((result) => callback(null, result));
};

(无论哪种情况,您都可以省略大括号,但我不确定我是否更喜欢它。)