问题 我如何承诺 - 如果在我的申请中一次性使用gulp?


作为我正在编写的小程序的一部分,我想使用gulp将大量文件转换为markdown。这不是与程序分开的构建步骤的一部分。这是该计划的一部分。所以我没有使用gulpfile来处理这个问题。

问题是,因为它是异步的,我想使用一个在gulp任务完成时会提醒我的promise。

这样的事情是理想的:

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 没有回电。我怎么能处理这个?谢谢你的帮助,我有点新意。


3004
2018-04-18 20:38


起源



答案:


gulp中的所有内容都是一个流,所以你可以只听 end 和 error 事件。

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

作为旁白, 问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);
  });
};

14
2018-04-18 20:44



啊!是!应该意识到这一点!谢谢! - Bryce Johnson
另外,我对Node中的ES6承诺支持一无所知。这太疯狂/太棒了。 - Bryce Johnson
我今天早上才发现我 new Promise 没有我安装蓝鸟的电话工作。我很困惑了一会儿。 - Dan Pantry


答案:


gulp中的所有内容都是一个流,所以你可以只听 end 和 error 事件。

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

作为旁白, 问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);
  });
};

14
2018-04-18 20:44



啊!是!应该意识到这一点!谢谢! - Bryce Johnson
另外,我对Node中的ES6承诺支持一无所知。这太疯狂/太棒了。 - Bryce Johnson
我今天早上才发现我 new Promise 没有我安装蓝鸟的电话工作。我很困惑了一会儿。 - Dan Pantry


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

2
2018-04-18 20:44