在 REPL 提示框中,按下 Enter 键会把当前行的输入发送到 eval 函数。 为了支持多行输入,eval 函数可以返回一个 repl.Recoverable 实例给提供的回调函数:

    1. function myEval(cmd, context, filename, callback) {
    2. let result;
    3. try {
    4. result = vm.runInThisContext(cmd);
    5. } catch (e) {
    6. if (isRecoverableError(e)) {
    7. return callback(new repl.Recoverable(e));
    8. }
    9. }
    10. callback(null, result);
    11. }
    12. function isRecoverableError(error) {
    13. if (error.name === 'SyntaxError') {
    14. return /^(Unexpected end of input|Unexpected token)/.test(error.message);
    15. }
    16. return false;
    17. }