节点的del命令 – callback不会触发

我正在通过一个吞咽复数的课程。 John Papa正在演示如何将一个删除现有css文件的函数插入到编译新函数的例程中。

del函数的callback不会触发。 del函数正在运行,文件被删除,我看不到任何错误信息。 如果我手动调用callback函数,它会执行,所以看起来像函数一样。 所以我想知道什么会导致DEL不想执行callback。

删除例程:

function clean(path, done) { log('cleaning ' + path); del(path, done); // problem call } 

'done'函数不会触发,但是如果我将代码更改为这样:

 function clean(path, done) { log('cleaning ' + path); del(path); done(); } 

当然,在继续之前,这等于del完成的预期目的失败了。

任何想法如何发生,将不胜感激。

以供参考(在相关的情况下):

编译css函数:

 gulp.task('styles', ['clean-styles'], function(){ log('compiling less'); return gulp .src(config.less) .pipe($.less()) .pipe($.autoprefixer({browsers:['last 2 versions', '> 5%']})) .pipe(gulp.dest(config.temp)); }); 

注入清洁function:

 gulp.task('clean-styles', function(done){ var files = config.temp + '/**/*.css'; clean(files, done); }); 

UPDATE

如果有其他人遇到这个问题,请重新观看培训video,并使用del的v1.1。 我检查了,我正在使用2.x. 安装v 1.1之后所有的作品。

del不是Node的命令,可能是这个 npm包。 如果是这样的话,它不会收到一个callback作为第二个参数,而是返回一个承诺,你应该调用.then(done)以获得del之后调用完成。

更新

更好的解决scheme是拥抱Gulp的诺言性质:

改变你的cleanfunction:

 function clean(path) { return del(path); // returns a promise } 

而你clean-styles任务:

 gulp.task('clean-styles', function(){ var files = config.temp + '/**/*.css'; return clean(files); }); 

从版本2.0开始 ,del的API改为使用promise。

因此,要指定callback,你应该使用.then():

 del('unicorn.png').then(callback); 

如果你需要从一个咕嘟咕噜的任务中调用它 – 只要从任务中返回一个承诺:

 gulp.task('clean', function () { return del('unicorn.png'); }); 

检查del包的文档看起来好像在节点的标准callback机制和使用承诺的del之间混淆了。

您将要使用承诺API与.then(完成)为了执行callback参数。

一般来说,Node和javascript在处理asynchronous代码的devise模式方面处于一种状态,大多数浏览器社区和标准人员倾向于承诺,而Node社区倾向于callback风格和库,例如asynchronous。

随着ES6标准化的承诺,我怀疑我们将会看到更多的节点不兼容性,因为那些热衷于API的人开始越来越多的融入到节点代码中。