我試圖用ffmpeg剪下一個帶有mp3的目錄幾秒鐘。 但我的實際問題與使用承諾。諾言流 - 藍鳥
而不是在另一個之後啓動一個ffmpeg進程,它立即爲每個文件啓動一個進程。 我的猜測是承諾沒有等待解決方案,我沒有正確理解它。
var P = require('bluebird');
var fs = P.promisifyAll(require("fs"));
function transcode(filename) {
return P.delay(1000).then(function() {
console.log(filename);
});
}
var in_dir = "./somedir/";
var getFiles = function(){
return fs.readdirAsync(in_dir);
};
getFiles().mapSeries(function(filename){
transcode(filename);
});
我想回答,但是重新閱讀之後,我刪除了它。看起來不正確。你能澄清一下慾望的輸出或效果嗎?使用承諾(或回叫)時,他們會並排開始,這很正常。然後你會收到通知(通過'then')進行「下一步」。 –
我想要一個順序的方法來處理每個轉碼,所以我不會一次啓動數百個進程,並讓我的CPU達到100%。我嘗試在底部使用'.mapSeries()'。或者可能有最多5個進程的隊列? –
避免['Promise' constructor antipattern](http://stackoverflow.com/q/23803743/1048572?What-is-the-promise-construction-antipattern-and-how-to-avoid-it)!在構造函數回調中只放入'ffmpeg()。...'鏈,而不是'getDuration(in_file)'promise。 – Bergi