避免多次调用任务完成callback?

考虑到下面的一些吞咽任务,我可以成功地启动gulp,webpack和nodemon进程,但是webpack任务是开放式的,所以当他们的watch / compile周期完成时,他们将继续触发完成处理程序。

服务器任务取决于客户端任务输出,所以我需要这些操作是同步的,因此done

 function onBuild(done) { return function(err, stats) { if(err) { gutil.log('Error', err); if(done) { done(); } } else { Object.keys(stats.compilation.assets).forEach(function(key){ gutil.log('Webpack: output ', gutil.colors.green(key)); }); gutil.log('Webpack: ', gutil.colors.blue('finished ', stats.compilation.name)); if(done) { done(); } } } } //dev watch gulp.task('webpack-client-watch', function(done) { webpack(devConfig[0]).watch(100, function(err, stats) { onBuild(done)(err, stats); }); }); gulp.task('webpack-server-watch', function(done) { webpack(devConfig[1]).watch(100, function(err, stats) { onBuild(done)(err, stats); nodemon.restart(); }); }); gulp.task('webpack-watch',function(callback) { runSequence( 'webpack-client-watch', 'webpack-server-watch', callback ); }); gulp.task('nodemon', ['webpack-watch'], function() { nodemon({ script: path.join('server/dist/index.js'), //ignore everything ignore: ['*'], watch: ['foo/'], ext: 'noop' }).on('restart', function() { gutil.log(gutil.colors.cyan('Restarted')); }); }); 

当我改变一个文件时,观察者做了它的事情,并且吞咽抱怨再次被调用的callback。

[15:00:25] Error: task completion callback called too many times

我已经看过这个,但不知道是否适用。

为什么我可能会得到“吞吐任务完成callback太多次”?

基本上,我只是希望这个同步和连续工作,没有错误。

gulp nodemon

这为我解决了这个问题:只是不要在你的webpack-watch任务中调用callback参数。 完全离开它。
之后,观察者工作得很好,没有抱怨。