2017-02-01 38 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

爲什麼你重複地稱它?你只需要做一次這樣的事情,而且只需要這樣的異步任務 –