我怎样才能承诺在我的应用程序中一次性使用 gulp



作为我正在编写的小程序的一部分,我想使用 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;
}

pipe不接受回调。我该如何处理?谢谢你的帮助,我有点不熟悉。

gulp 中的所有内容都是流,因此您可以只收听enderror事件。

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 完全不兼容;我推荐蓝鸟作为替代品。

另外值得一提的是,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);
  });
};
<</div> div class="one_answers">

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

相关内容

  • 没有找到相关文章

最新更新