承诺流 - 蓝鸟

promise flow - bluebird

我正在尝试使用 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);
});

我已经创建了您的代码的简化版本。唯一缺少的是最终闭包的 return 语句:

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){
    return transcode(filename);
});