Node.js 退出模块,但不退出整个NodeJS进程
我有一个复杂的解析/文本处理模块,有时在回调链的深处,会遇到无法恢复的错误,基本上会:Node.js 退出模块,但不退出整个NodeJS进程,node.js,callback,gulp,exit,abort,Node.js,Callback,Gulp,Exit,Abort,我有一个复杂的解析/文本处理模块,有时在回调链的深处,会遇到无法恢复的错误,基本上会: console.log('Things went bad. Aborting.'); process.exit(1); 我想从一个文件中调用这个模块。使用child\u exec()执行此操作正常。但是,require()模块,然后进行常规调用可能会更优雅 问题是在这种情况下调用process.exit()会导致整个进程退出,我不希望这样:gulpfile应该优雅地处理错误 是否有任何方法可以实现这一点,而
console.log('Things went bad. Aborting.');
process.exit(1);
我想从一个文件中调用这个模块。使用child\u exec()
执行此操作正常。但是,require()
模块,然后进行常规调用可能会更优雅
问题是在这种情况下调用process.exit()
会导致整个进程退出,我不希望这样:gulpfile应该优雅地处理错误
是否有任何方法可以实现这一点,而不需要有效地跟踪中止
标志,并确保在它被触发后不会继续处理?没有方法“中止模块”。一旦加载了代码,解释器就不会跟踪代码的来源。这只是在那一点上的代码。另外,模块或模块的调用者可以有状态,并且是您,即编码者,负责在错误情况发生时保持正确的状态
这听起来好像你真的只需要编写正确的错误处理代码,一直回到一个适当的级别。对于正确的错误处理,没有神奇的快捷方式。没有模块完成。你可以做一些事情:
如果是回调链使得错误很难恰当地传播回来,那么承诺可以让这变得容易很多,因为它们提供了一种内置的错误传播机制,非常容易使用。事实上,在编写需要处理所有可能错误的生产质量代码时,我发现promises的异步错误处理是它们最有价值的特性—既节省时间又节省精力,并提高代码质量。出于其他原因,它们也很有用,但是异步错误处理可能会使您在这个特定项目中受益匪浅。您必须“承诺”每个异步操作才能充分利用。回答得很好,谢谢。这是一个开始有点古怪和肮脏的代码库,并且比预期的要大。我通常使用承诺(在浏览器端代码中),但在这种情况下没有特别好的理由。现在开始使用when.liftAll(fs)。回答得很好,谢谢。这是一个开始有点古怪和肮脏的代码库,并且比预期的要大。我通常使用承诺(在浏览器端代码中),但在这种情况下没有特别好的理由。现在使用when.liftAll(fs)。