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

成功了!