Javascript 我如何保证在我的应用程序中一次性使用gulp?

Javascript 我如何保证在我的应用程序中一次性使用gulp?,javascript,node.js,gulp,q,Javascript,Node.js,Gulp,Q,作为我正在编写的一个小程序的一部分,我想使用gulp将一大组文件转换为markdown。这不是独立于程序的构建步骤的一部分。这是节目的一部分。所以我不是用一个大瓶子来处理这个 问题是,因为它是异步的,所以我想使用一个承诺,它会在吞咽任务完成时提醒我 像这样的东西很理想: io.convertSrc = function() { var def = q.defer(); gulp.src(src + '/*.md') .pipe(marked({})) .pipe(gul

作为我正在编写的一个小程序的一部分,我想使用gulp将一大组文件转换为markdown。这不是独立于程序的构建步骤的一部分。这是节目的一部分。所以我不是用一个大瓶子来处理这个

问题是,因为它是异步的,所以我想使用一个承诺,它会在吞咽任务完成时提醒我

像这样的东西很理想:

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

但是
pipe
不接受回调。我该怎么办?谢谢你的帮助,我是个新手

由于Gulp任务是一条流,因此您可以监听它的事件:

io.convertSrc = function() {
  var def = q.defer();

  var stream = gulp.src(src + '/*.md')
    .pipe(marked({}))
    .pipe(gulp.dest(dist));

  stream.on('end', function() {
    def.resolve();
  });

  stream.on('error', function(err) {
    def.reject(err);
  });

  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 2.0不兼容;我建议你另作选择

还值得一提的是,NodeJS 0.12以后版本内置了ES6承诺(无需使用任何
--harmony
标志),因此如果您不寻求向后兼容性,您可以使用它们

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

啊!!对我应该意识到这一点!非常感谢。另外,我对Node中的ES6 promise支持一无所知。太疯狂了/太棒了。