2017-02-01 37 views
0

如何管理以下任务以使消息正确显示? “完成”是在任务实际完成之前完成的。我想这是因为请求模块。我试图将请求包装为承诺,但没有运气。有任何想法吗?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!')); 
     }); 
    }); 
}); 
+0

把代码作为文本,而不是图像... –

+0

你是对的,我不知道为什么我这样做大声笑 – kfa

回答

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函数被调用你的任务将被考虑。

+0

谢谢亚当,虽然调用done()重复使得gulp崩溃错误“任务完成回调调用次数太多”。但没关系,我只需要完成这项任务。 – kfa

+0

为什么你重复地称它?你只需要做一次这样的事情,而且只需要这样的异步任务 –