代码之家  ›  专栏  ›  技术社区  ›  sbtpr

由于节点中的可执行路径无效,为什么try-catch块无法捕获子进程spawn异常。js?

  •  4
  • sbtpr  · 技术社区  · 7 年前
    const { spawn } = require("child_process")
    
    try{
        spawn("invalid/path/to/executable")
    }catch(err){
        console.log("exception: ",err)
    }
    

    此代码引发错误,程序停止执行。它从不打印 exception: 因此不会执行catch块:

    events.js:183
          throw er; // Unhandled 'error' event
          ^
    
    Error: spawn invalid/path/to/executable ENOENT
    

    当使用可执行文件的有效路径运行时,相同的代码也可以工作。

    当spawn由于eNont错误而失败时,我该如何处理这种情况?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Yevhenii Herasymchuk    7 年前

    此模块启动 error 事件,您可以为其添加一个侦听器。 你可以了解更多 here

    因此,您可以将代码转换为:

    const {spawn} = require("child_process")
    
    const subprocess = spawn("invalid/path/to/executable")
    subprocess.on('error', function (err) {
      console.log('Failed to start subprocess: ' + err);
    });
    

    还有,我建议你读一下 article 作者:Samer Buna。他讲述了很多关于这个模块的有趣话题。