我正在尝试运行此函数,但当我显式硬编码返回值时,它始终返回未定义。
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/