如何捕获调用不存在的文件的 .fork() 错误?
var cp = require('child_process');
var fk = cp.fork("missing-file.js");
喷出
module.js:340
throw err;
^
Error: Cannot find module 'path-to-here/missing-file.js'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:906:3
我试过了
try {
var cp = require('child_process');
var fk = cp.fork("missing-file.js");
} catch(err) {
console.log("async error doesn't get caught here.");
}
fk.on('error', function(err) {
console.log("this never gets called");
})
process.on('uncaughtException', function(err) {
console.log("this never gets called either");
});
但这些都没有发现错误。
Joyent 的文档表示在以下情况下应发出错误事件:
- 无法生成该进程,或者
- 该进程无法被终止,或者
- 无论出于何种原因,向子进程发送消息失败。
但这似乎发生在#1 之前。
我在看处理node.js中require()模块抛出的错误但那里的解决方案不起作用。
我如何捕捉这个错误?
这里没有错误。node
开始一切正常,找不到文件,然后退出。这些事情都不会在父进程中引发错误。然而,第二步(“无法找到文件”)导致子进程在其进程上发出一些文本。stdout
,默认情况下是从父进程继承的。这就是您所看到的文本的来源(要抑制它,请传递fork
the silent: true
选项)。
如果您尝试检测此错误,可以在close
事件。该处理程序将使用 2 个参数进行调用,但您只关心第一个参数:退出代码。当 Node 找不到源文件时,它会使用退出代码 8(尽管请注意,脚本也可以使用退出代码 8,因此这并不是万无一失的)。请注意,退出代码 0 通常表示进程成功结束。
因此,如果您想对未找到的文件采取行动并禁止显示错误消息stdout
, 你可以:
var cp = require('child_process');
var fk = cp.fork("missing-file.js", {silent: true});
fk.on('close', function(code) {
if(code == 8) {
// Handle the missing file case here.
}
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)