Yargs:在严格模式下抛出的错误仍未被捕获

问题描述

我正在使用 Yargs 构建一个交互式 CLI,它从 stdin 获取命令并在发生错误时继续执行。从官方文档中,我发现yargs.parse 可以提供我需要的功能。然而,尽管该过程确实在出错时继续进行,它无法控制地打印错误调用堆栈;而且,即使用户稍后给出正确的命令,之前的所有错误调用堆栈仍会被打印,这肯定会混淆和误导用户。根据格式,我认为这是抛出未捕获错误时的自动行为,所以我的问题是:我应该在哪里以及如何捕获这些错误 显然 yargs 中提供的回调函数.parse 不是抛出错误的范围。
这是一个演示片段

import Yargs = require("yargs");
import Reader = require("readline-sync");
import Chalk = require("chalk");

while (true) {
    try {
        Yargs.strict().help()
            .command({
                command: "exit",describe: "Exit the program",handler: _ => {
                    try {
                        console.log(Chalk.greenBright("exiting"));
                        process.exit();
                    }
                    catch (error) {
                        console.log(Chalk.yellowBright("caught"));
                    }
                }
            })
            .parse(Reader.question(Chalk.yellowBright("> ")),null,(error,argv,output) => {
                console.log(Chalk.redBright("callback"));
            });
    }
    catch (error) {
        console.log(Chalk.yellowBright("caught"));
    }
}

如您所见,我已经尝试将整个语句和命令处理程序放在 try-catch 块中,但是,错误仍未被捕获。

Demo image

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)