我试图用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