作为我写的小程序的一部分,我想使用gulp将大量文件转换为markdown.这不是与程序分离的构建步骤的一部分.这是程序的一部分.所以我没有使用gulpfile来处理这个.
问题是,由于它是异步的,我想使用一个承诺,当gulp任务完成时会提醒我.
这样的事情是理想的:
io.convertSrc = function() { var def = q.defer(); gulp.src(src + '/*.md') .pipe(marked({})) .pipe(gulp.dest(dist),function() { def.resolve('We are done!'); }); return def.promise; }
但管道不采取回调.我该怎么处理这个?感谢您的帮助,我有点新鲜的吞咽.
解决方法
gulp中的所有内容都是流,所以您只需听取结束和错误事件.
io.convertSrc = function() { var def = q.defer(); gulp.src(src + '/*.md') .pipe(marked({})) .pipe(gulp.dest(dist)) .on('end',function() { def.resolve(); }) .on('error',def.reject); return def.promise; }
除此之外,Q 1.0不再开发(除了这里和那里的几个修复之外),与Q 2.0完全不兼容;我建议Bluebird替代.
另外值得一提的是,NodeJS 0.12之后,它内置了ES6承诺(不需要调和标志),所以如果你不想向后兼容,你可以直接使用它们.
io.convertSrc = function() { return new Promise(function(resolve,reject) { gulp.src(src + '/*.md') .pipe(marked({})) .pipe(gulp.dest(dist)) .on('end',resolve) .on('error',reject); }); };