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

Javascript 如何最大限度地减少有时需要回调的代码重复?,javascript,callback,gulp,code-duplication,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(

在我的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 watcher对象的
.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):

我将使用
gulp.series
运行回调,而不显式地将回调传递给任务生成器函数,并将任务直接传递给
gulp.watch

如果您的需求要求
构建页面
采用
路径
,那么我认为您的做法是正确的,如果我误解了这个问题,请原谅

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