可恢复的错误


【Recoverable errors】

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

function myEval(cmd, context, filename, callback) {
  let result;
  try {
    result = vm.runInThisContext(cmd);
  } catch (e) {
    if (isRecoverableError(e)) {
      return callback(new repl.Recoverable(e));
    }
  }
  callback(null, result);
}

function isRecoverableError(error) {
  if (error.name === 'SyntaxError') {
    return /^(Unexpected end of input|Unexpected token)/.test(error.message);
  }
  return false;
}