gulp任务运行请求显示日志消息太晚了

时间:2017-02-01 22:07:47

标签: javascript node.js gulp

如何正确显示消息,您将如何管理以下任务? “完成”在任务实际完成之前出现。我想这是因为请求模块。我试图将请求包装成一个承诺,但没有运气。有什么想法吗?

gulp.task('sign', function() {

  util.log(util.colors.yellow('fetching build number from remote URL:'));
  util.log(util.colors.yellow(JENKINS_URL));

  request(JENKINS_URL, function(err, res, body) {
    var parsed = isJson(body);
    var number = parsed.number;

    return gulp.src(path.join(DIST_DIR, '**'))
      .pipe(replace('<%= B =%>', number))
      .on('end', function() {
        util.log(util.colors.yellow('new build number is: ' + number));
      })
      .pipe(replace('<%= V =%>', VERSION))
      .on('end', function() {
        util.log(util.colors.yellow('app version is: ' + VERSION));
      })
      .pipe(gulp.dest(DIST_DIR))
      .on('finish', function() {
        util.log(util.colors.green('operation ended successfully!'));
      });
  });
});

1 个答案:

答案 0 :(得分:1)

您的任务是异步的(它正在发出请求)。因此,您应该使用参数(函数)并在完成后调用它。

请考虑以下示例:

gulp.task('sign', function(done) {

  util.log(util.colors.yellow('fetching build number from remote URL:'));
  util.log(util.colors.yellow(JENKINS_URL));

  request(JENKINS_URL, function(err, res, body) {
    var parsed = isJson(body);
    var number = parsed.number;

    return gulp.src(path.join(DIST_DIR, '**'))
      .pipe(replace('<%= B =%>', number))
      .on('end', function() {
        util.log(util.colors.yellow('new build number is: ' + number));
      })
      .pipe(replace('<%= V =%>', VERSION))
      .on('end', function() {
        util.log(util.colors.yellow('app version is: ' + VERSION));
      })
      .pipe(gulp.dest(DIST_DIR))
      .on('finish', function() {
        util.log(util.colors.green('operation ended successfully!'));
        done(); 
      });
  });
});

通过这样做,在调用done函数时,您的任务将被视为已完成。