gpt4 book ai didi

node.js - 使用 ffmetadata 和 fs 在 nodejs 中读取文件元数据返回未定义

转载 作者:行者123 更新时间:2023-12-04 23:21:46 29 4
gpt4 key购买 nike

我似乎无法做到这一点。我正在尝试通过使用 fs 的文件夹上的循环使用 ffmetadata 读取文件的元数据(标题)。然后我想将这些属性推送到一个名为 files 的对象数组中。如果我将 push 方法放在 ffmetadata 中,它会引发“push is not a function”错误。如果我将 push 方法放在 ffmetadata 外部,但在 readdirSync 内部,则会创建对象,但标题未定义。
我想我遇到了异步问题或变量范围问题?我在上面放置了几个 Console.logs,并且从元数据返回的代码在本节之后的代码之后返回。
任何帮助表示赞赏。

var path = './AudioFiles/'
var files = [];
var fTitle

//Read list of files
fs.readdirSync(path).forEach((file) => {
ffmetadata.read(path + file, function(err, data){
if (err) console.error("Error reading metadata", err);
else {
fTitle = data.title
}
})
files.push({name:file.replace('.mp3',''),title:fTitle})
})
这是我收到的:
files = [{name:"myFile1",title:undefined},{name:"myFile2",title:undefined}...]
我期待以下结果:
files = [{name:"myFile1",title:"myFile1Title"},{name:"myFile2",title:"myFile2Title"}...]

最佳答案

万一有人遇到这个,我想通了。这是一个异步问题。

   //Get Metadata
function getTitles(path, fName){
return new Promise((resolve) => {
setTimeout(() => {
ffmetadata.read(path + fName, function(err, data){
if (err) console.error("Error reading metadata", err);
else {
resolve({name:fName,title:data.title});
}
})
}, 1000);
});
}

function getFiles() {
var path = './AudioFiles/'
var files = '';
const promises = [];
fs.readdirSync(path).forEach((file) => {
files += file + ',';
})
files = files.substring(0,files.length - 1).split(',')

for(i = 0; i < files.length; i++){
promises.push(getTitles(path, files[i]))
}

Promise.all(promises)
.then((results) => {
//Do Stuff Here
console.log(results)
})
.catch((e) => {
//Handle errors here
});
}

//Call our function
getFiles();
return;

关于node.js - 使用 ffmetadata 和 fs 在 nodejs 中读取文件元数据返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64761840/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com