你能在一个async gulp任务中启动条件任务吗?

jgovgodb  于 2022-12-08  发布在  Gulp
关注(0)|答案(1)|浏览(133)

我想创建一个任务,它只在发生变化时构建整个项目。为此,我比较了哈希值(与问题无关)。

const buildIfChanged = async () => {
  const hash = await getHash();
  const newHash = await getNewHash();

  if (hash !== newHash) {
    console.log("START");
    const task = series(build, cleanup)();
    console.log("END", task);
  }
};

在这个例子中,taskundefined,所以我不能添加一个.on("end", ...),然后解决这个承诺,我也不能等待它。
问题是,因为我没有等待它完成,所以buildIfChanged任务甚至在build运行之前就完成了。
有没有办法用现代的大锉刀做到这一点?

kd3sttzy

kd3sttzy1#

我已经在现代的gulpfiles中找到了一个解决方案,parallelseries的函数调用实际上是以done函数作为参数的。
因此,要解决此问题,您可以执行以下操作:

const buildIfChanged = async () => {
  return new Promise(async (res, rej) => {
    try {
      const hash = await getHash();
      const newHash = await getNewHash();

      if (hash !== newHash) {
        console.log("START");
        const task = series(build, cleanup)(() => res()); // add the done function here
        console.log("END", task);
      }
    } catch(e) {
      rej(e);
    }
  })
};

相关问题