私はffmpegを使用してmp3でディレクトリを数秒間切り取ろうとしています。 しかし私の実際の問題は約束を使っています。promise flow - bluebird
ffmpegプロセスを1つ起動するのではなく、すぐにファイルごとに起動します。 私の推測では、約束が解決を待っているわけではなく、正しく理解していないと思います。
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'コンストラクタの反パターンを避けてください](http://stackoverflow.com/q/23803743/1048572?What-is-the-promise-construction-antipattern-and-how-to-avoid-it)! 'ffmpeg()。...'チェーンだけをコンストラクタのコールバックに入れてください。ただし、 'getDuration(in_file)'約束はしないでください。 – Bergi