Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript gulp任务运行请求显示日志消息太晚_Javascript_Node.js_Gulp - Fatal编程技术网

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

Javascript gulp任务运行请求显示日志消息太晚,javascript,node.js,gulp,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

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

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!'));
      });
  });
});
gulp.task('sign',function(){
util.log(util.colors.yellow('从远程URL获取内部版本号:');
util.log(util.colors.yellow(JENKINS_URL));
请求(JENKINS_URL、函数(err、res、body){
var parsed=isJson(body);
var number=已解析的.number;
return gulp.src(path.join(DIST_DIR,'**'))
.管道(更换('',编号))
.on('end',function(){
util.log(util.colors.yellow('newbuildnumber为:'+number));
})
.管道(更换('',版本))
.on('end',function(){
util.log(util.colors.yellow('app版本为:'+version));
})
.管道(大口目的地(距离方向))
.on('finish',function(){
util.log(util.colors.green('操作成功结束!'));
});
});
});
您的任务是异步的(它正在发出请求)。因此,您应该获取一个参数(函数),并在完成时调用它

考虑以下示例:

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(); 
      });
  });
});
gulp.task('sign',函数(done){
util.log(util.colors.yellow('从远程URL获取内部版本号:');
util.log(util.colors.yellow(JENKINS_URL));
请求(JENKINS_URL、函数(err、res、body){
var parsed=isJson(body);
var number=已解析的.number;
return gulp.src(path.join(DIST_DIR,'**'))
.管道(更换('',编号))
.on('end',function(){
util.log(util.colors.yellow('newbuildnumber为:'+number));
})
.管道(更换('',版本))
.on('end',function(){
util.log(util.colors.yellow('app版本为:'+version));
})
.管道(大口目的地(距离方向))
.on('finish',function(){
util.log(util.colors.green('操作成功结束!'));
完成();
});
});
});

这样,当调用
done
函数时,您的任务将被视为已完成

将代码作为文本,而不是图像…你是对的,我不知道我为什么这样做。谢谢你,Adam,工作非常好,尽管重复调用done()会导致gulp崩溃,错误为“任务完成回调调用太多次”。但那很好,我只需要完成那项任务。你为什么重复这么称呼它?您只需要执行一次,并且只需要在异步任务中执行一次