javascript - 异步 Javascript 函数返回未定义

标签 javascript node.js ffmpeg async-await

我正在尝试运行此函数,但当我显式硬编码返回值时,它始终返回未定义。

const splitVideo = async (sid, video, part) => {
    let framesLocation =`${process.cwd()}/${dirs.videoFrames}/${sid}_${part}`;

    console.log(fs.existsSync(framesLocation));

    if(!fs.existsSync(framesLocation)) {
        console.log("making dir");
        f.s.mkdirSync(framesLocation);
    }

    ffmpeg(video)
        .on('end', () => {
             return "done";
         })
         .on('error', (err) => {
             throw err;
         })
         .screenshots({
              timestamps: [1,2],
              filename: `${sid}_${part}/frame-%s.png`,
              folder: `${process.cwd()}/${dirs.videoFrames}`
         });
};

请帮忙,这非常令人沮丧。

最佳答案

您的函数不返回任何内容,这就是为什么您得到未定义。将 ffmpeg 调用包装在 new Promise(...) 中,以便能够解析其异步结果:

const splitVideo = async (sid, video, part) => {
    // ...

    return new Promise((resolve, reject) => {
        ffmpeg(video)
            .on('end', () => {
                resolve("done");
             })
            .on('error', (err) => {
                reject(err);
             })
             .screenshots({
                  timestamps: [1,2],
                  filename: `${sid}_${part}/frame-%s.png`,
                  folder: `${process.cwd()}/${dirs.videoFrames}`
             });
    };
};

const ret = await splitVideo(...);
console.log(ret);

另请注意,您需要 await 此函数才能读取结果(或在 then 处理程序中获取结果)。

关于javascript - 异步 Javascript 函数返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49802182/

相关文章:

javascript - 我正在尝试检测 div 是否包含 iFrame

javascript - 我们如何将当前日期时间传递给 HTML 页面中的 angularjs 函数?

javascript - 在 JavaScript 中获取我的 Web 应用程序基本 URL

flash - 网络音频流

ffmpeg - 如何使用 "ffprobe"命令检查直播是否还活着?

FFmpeg 转码声音 (AAC) 在半个视频时间后停止

javascript - 在 JavaScript 中查找 bool 值的变量名

javascript - 组合点击和触摸启动事件不起作用

javascript - 将 cookie 的值设置为模板文字?

javascript - Electron 应用名称不变