Gulp:在任务错误时继续并行生成

s1ag04yj  于 2022-12-08  发布在  Gulp
关注(0)|答案(2)|浏览(138)

作为Gulp构建过程的一部分,我获取一个外部RSS提要,将其转换为JSON,并将其写入一个文件。有时RSS提要不可用,这会导致构建过程返回错误:
错误:套接字在connResetException处挂起(internal/errors.js:607:14)
在TLS中,您可以在客户端上创建一个套接字。
在TLSSocket. emitter(事件.js:327:22)上执行此操作
在TLSSocket.EventEmitter. emitter(域.js:529:15)中,您可以使用一个或多个事件来发送消息。
在endReadableNT(内部/流/可读.js:1327:12)
js:80:21在进程中的时间点和拒绝(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);
  }
}

但是它似乎什么都没做。我该如何修改上面的任务以确保错误不会停止整个操作呢?

ddrv8njm

ddrv8njm1#

@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();
  }
}

这招奏效了!

jm2pwxwz

jm2pwxwz2#

因为gulp任务需要返回一个Promise,所以你试图捕捉错误的尝试确实会抑制错误,但你的任务不会继续。这应该像从你的catch块中返回一个Promise一样简单。

try { 
  // happy path
}
catch(e) {
  console.log(e);
  return Promise.resolve();
}

然后,您的任务应该会继续。

相关问题