javascript - 如何最大限度地减少有时需要回调的代码重复?

标签 javascript callback gulp code-duplication

在我的 gulpfile 中,我有一个任务处理我的所有页面,另一个任务监视我的页面是否发生更改并仅处理更改的页面。它看起来像这样:

const buildPages = path => cb => {
  gulp.src(path)

    // some lines of piping

    .pipe(gulp.dest(pages.dist));

  cb();
}

const watchPages = () =>
  gulp.watch(pages.src).on('change', path =>
    gulp.src(path)

      // the same piping as above

      .pipe(gulp.dest(pages.dist))
  );

gulp.watch() 返回的 chokidar 观察者对象的 .on() 方法没有接收回调函数,而其上面的 gulp 任务需要一个回调函数。因此,要删除重复的代码,我可以这样做:

const buildPages = path =>
  gulp.src(path)

    // some lines of piping

    .pipe(gulp.dest(pages.dist));

const buildPagesWithCallback = path => cb => {
  buildPages(path)
  cb();
}

const watchPages = () =>
  gulp.watch(pages.src).on('change', path =>
    buildPages(path)
  );

这是正确的方法吗?还是有办法在不创建额外函数的情况下删除重复项(也许通过让观察者接收回调)?

最佳答案

不确定您的其他要求/需求是什么,但根据您的描述,我通常会有这样的设置(假设您使用的是 gulp 4):

const src = [ './src/pageA/**/*.js', ...others ];
const dist = './dist';

const buildPages = () => gulp.src(src).pipe(...).pipe(gulp.dest(dist));
const callback = () => { /* do stuff */ };

exports.buildPageWithCallback = gulp.series(buildPages, callback);
exports.watchPages = () => gulp.watch(src, gulp.series(buildPages));
exports.watchPageWithCallback = () => gulp.watch(src, gulp.series(buildPages, callback));

我将使用gulp.series来运行回调,而无需显式地将回调传递给任务创建者函数,并将任务直接传递给gulp.watch

如果您的要求要求buildPages接受路径,那么我认为您的做法是正确的,如果我误解了这个问题,抱歉

关于javascript - 如何最大限度地减少有时需要回调的代码重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54299119/

相关文章:

javascript - ActiveX 多线程调用 javascript 回调例程时出现问题

成员函数的 C++ 回调函数

javascript - gulp 错误 : unable to minify JavaScript

asp.net - 使用 Visual Studio 2015 在 gulp 中检测发布/调试

c++ - 将函数模板定义为类模板的回调

javascript - Kendo UI Treeview - 绑定(bind)到本地数据时更新复选框状态

javascript - 循环子对象

javascript - Chrome 扩展程序中的消息传递问题

Node.js Gulp src/dest 4.0 行为与 Gulp 3.6

javascript - 将 Javascript 与两个相同类的两个 div 一起使用