当返回承诺而不是流时,Gulp结束得太早

时间:2015-10-25 15:25:18

标签: node.js gulp tslint

我有一个tslint任务,当我像这样返回gulp流时,它可以工作

  return gulp.src('src/**/*.ts')
    .pipe(tslint())
    .pipe(tslint.report('verbose'));

但是当我尝试返回一个承诺时,它似乎在任务结束前完成了?

let deferred = Q.defer();
gulp.src('src/**/*.ts')
  .pipe(tslint())
  .pipe(tslint.report('verbose'))
  .on('finish', () => deferred.resolve());
return deferred.promise;

1 个答案:

答案 0 :(得分:0)

有两种方法可以解决这个问题。

如果您希望返回Promise而不是仅返回流,请按this answer收听事件enderror

第二种方法是从Q库切换到bluebird(或使用节点中包含的Promise库)。我发现Q中的Promise实现没有按预期工作(在节点4.2.6中使用gulp 3.9.0),但切换到bluebird确实有效。