Я пытаюсь использовать ffmpeg, чтобы вырезать несколько секунд каталога с mp3. Но мои актуальные проблемы связаны с использованием обещаний.обещание flow - bluebird
Вместо запуска одного процесса 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') для« следующего шага ». –
Я хочу последовательный подход для каждого транскода, поэтому я не получаю сразу сотни процессов и имею свой процессор на 100%. Я попытался использовать '.mapSeries()' внизу. Или, может быть, есть очередь из 5 процессов? –
Избегайте антипаттера конструктора '' Promise' (http://stackoverflow.com/q/23803743/1048572?What-is-the-promise-construction-antipattern-and-how-to-avoid-it)! Поместите только цепочку 'ffmpeg(). ...' в обратном вызове конструктора, но не обещание 'getDuration (in_file)'. – Bergi