gpt4 book ai didi

javascript - 防止非流错误破坏 gulp watch

转载 作者:行者123 更新时间:2023-12-03 11:17:27 24 4
gpt4 key购买 nike

我已遵循 this question 中找到的推荐解决方案,但我仍然看到一些让我的观察者崩溃的错误。

给定一个这样的观察者:

var through = require('through2');
var watch = require('gulp-watch');

gulp.task('catchall', function() {
return watch('gulpfile.js')
.pipe(through.obj(externalFunc))
.on('error', function(err) {
console.log('Inside error handler:', err);
});
});

externalFunc 定义为:

function externalFunc(file, enc, done) {
throw new Error("I have been compromised - Abort mission!");
}

我希望看到以下输出:

[10:52:51] Starting 'catchall'...
[10:52:53] gulpfile.js was changed
Inside error handler: I have been compromised - Abort mission!

相反,我没有从 externalFunc 得到任何输出,而是得到标准错误输出和堆栈跟踪:

[10:52:51] Starting 'catchall'...
[10:52:53] gulpfile.js was changed

/my/path/to/gulpfile.js:27
throw new Error("I have been compromised - Abort mission!");
^
Error: I have been compromised - Abort mission!
at DestroyableTransform.externalFunc [as _transform] ....

最重要的是,观察者崩溃了。

为什么这个错误不会被 on('error') 监听器捕获,我可以在 gulp 观察器中做什么来处理这些错误而不退出?

最佳答案

它不会陷入错误监听器中,因为正如您所说,这不是流错误。

您实际上向运行 gulp节点进程抛出了一个错误,并且没有捕获它,因此它表现为 uncaughtException并完全崩溃所有内容,而无需等待您设置的错误处理程序来完成其工作。

仅用于演示,但不推荐,您可以执行以下操作:

process.on('uncaughtException', function (er) {
console.error('Throwing error:', er);
});

该错误将被记录下来,并且您的 gulp watch 仍将运行。

我建议你看看Node Domains为了安全地处理你的错误,尽管我不知道在 gulp 之类的东西中使用 uncaughtException 是否真的是一个坏习惯。

关于javascript - 防止非流错误破坏 gulp watch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27276168/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com