Gulp:继续并行构建任务错误
Gulp: Continue parallel build on task error
作为我的 Gulp 构建过程的一部分,我正在获取外部 RSS 提要,将其转换为 JSON,并将其写入文件。有时 RSS 提要不可用,这会导致构建过程 return 出错:
Error: socket hang up
at connResetException (internal/errors.js:607:14)
at TLSSocket.socketOnEnd (_http_client.js:493:23)
at TLSSocket.emit (events.js:327:22)
at TLSSocket.EventEmitter.emit (domain.js:529:15)
at endReadableNT (internal/streams/readable.js:1327:12)
at processTicksAndRejections (internal/process/task_queues.js:80:21)
任务是 运行 作为 gulp.parallel
操作的一部分。它对其余过程不是必需的,我希望即使此任务失败也能继续构建。
我试过如下实现错误处理:
// RSS to JSON
const { parse } = require('rss-to-json');
const fs = require('fs');
function parseRss(cb) {
try {
return parse('https://feeds.buzzsprout.com/1794525.rss')
.then(rss => {
fs.writeFileSync('./site/_data/podcast.json', JSON.stringify(rss, null, 3));
});
} catch(e) {
console.log(e);
}
}
但它似乎什么也没做。我将如何着手修改上述任务以确保错误不会停止整个操作?
因为 gulp 任务 need to return a Promise 您尝试捕获错误确实会抑制错误,但您的任务不会继续。它应该像从 catch 块返回一个 Promise 一样简单。
try {
// happy path
}
catch(e) {
console.log(e);
return Promise.resolve();
}
然后您的任务应该继续。
@matt123miller 的回答很有帮助,但并没有让我一路走下去。然而,它确实让我走上了正确的轨道。在尝试并未能使用他的解决方案获得预期行为后,我尝试使函数异步,然后将 try / catch 逻辑添加回:
async function parseRss(cb) {
try {
let rss = await parse('https://feeds.buzzsprout.com/1794525.rssfg');
fs.writeFileSync('./site/_data/podcast.json', JSON.stringify(rss, null, 3));
} catch (err) {
console.log("The RSS feed couldn't be loaded or parsed");
return Promise.resolve();
}
}
成功了!
作为我的 Gulp 构建过程的一部分,我正在获取外部 RSS 提要,将其转换为 JSON,并将其写入文件。有时 RSS 提要不可用,这会导致构建过程 return 出错:
Error: socket hang up at connResetException (internal/errors.js:607:14)
at TLSSocket.socketOnEnd (_http_client.js:493:23)
at TLSSocket.emit (events.js:327:22)
at TLSSocket.EventEmitter.emit (domain.js:529:15)
at endReadableNT (internal/streams/readable.js:1327:12)
at processTicksAndRejections (internal/process/task_queues.js:80:21)
任务是 运行 作为 gulp.parallel
操作的一部分。它对其余过程不是必需的,我希望即使此任务失败也能继续构建。
我试过如下实现错误处理:
// RSS to JSON
const { parse } = require('rss-to-json');
const fs = require('fs');
function parseRss(cb) {
try {
return parse('https://feeds.buzzsprout.com/1794525.rss')
.then(rss => {
fs.writeFileSync('./site/_data/podcast.json', JSON.stringify(rss, null, 3));
});
} catch(e) {
console.log(e);
}
}
但它似乎什么也没做。我将如何着手修改上述任务以确保错误不会停止整个操作?
因为 gulp 任务 need to return a Promise 您尝试捕获错误确实会抑制错误,但您的任务不会继续。它应该像从 catch 块返回一个 Promise 一样简单。
try {
// happy path
}
catch(e) {
console.log(e);
return Promise.resolve();
}
然后您的任务应该继续。
@matt123miller 的回答很有帮助,但并没有让我一路走下去。然而,它确实让我走上了正确的轨道。在尝试并未能使用他的解决方案获得预期行为后,我尝试使函数异步,然后将 try / catch 逻辑添加回:
async function parseRss(cb) {
try {
let rss = await parse('https://feeds.buzzsprout.com/1794525.rssfg');
fs.writeFileSync('./site/_data/podcast.json', JSON.stringify(rss, null, 3));
} catch (err) {
console.log("The RSS feed couldn't be loaded or parsed");
return Promise.resolve();
}
}
成功了!