2016-02-25 53 views
0

我有一個使用水珠流遞歸遍歷目錄和文件來執行任務的咕嘟咕嘟任務,類似於以下,但更復雜的:杯和水珠流任務結束太早

var gs = require('glob-stream'); 

var config = { 
    PATH: 'some/path/*.*' 
} 


function doSomething(filePath) { 
    var stream = gs.create(filePath); 

    // Do something 

    return gs.on('data', doSomething); 
} 


gulp.task('compile', function() { 
    var filePath = config.PATH; 
    return doSomething(filePath); 
}); 

我可以完成任務並編譯我需要的結果,但不幸的是,Gulp認爲任務已經完成,但仍在運行,導致構建過程中出現問題 - 我該如何避免這種情況?我已經在使用run-sequence,但沒有效果。

回答

0

爲什麼你要用遞歸函數手動移動目錄樹?爲什麼不讓glob-stream爲你做好工作?然後,你只需要採取//Do something部分的護理:

var config = { 
    PATH: 'some/path/**' //glob pattern for all subfolder and files 
}; 

function doSomething(filePath) { 
    //Do something 
} 

gulp.task('compile', function() { 
    var stream = gs.create(config.PATH); 
    stream.on('data', doSomething); 
    return stream; 
}); 

gulp.task('secondTask', function() { 
    console.log('secondTask'); 
}); 

gulp.task('default', function() { 
    runSequence('compile', 'secondTask'); 
}); 

some/path/** glob模式生成以下some/path/所有文件夾和文件的流,所以您不必執行遞歸樹走自己。請注意0​​任務返回stream。否則吞嚥不能分辨何時compile任務已完成並開始運行secondTask之前compile已完成。

+0

嘿,謝謝你的迴應!我正在努力的部分是在編譯任務完成之前仍然調用的第二個任務,即使在返回流之後! –

+0

你是否放棄了你的遞歸'doSomething()'?如果是,那麼你可能在'doSomething()'中做了一些異步操作。流完成並且您的第二個任務開始運行,但您的異步操作尚未完成。 –