【发布时间】:2021-02-21 23:23:12
【问题描述】:
我似乎无法做到这一点。我正在尝试通过使用 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"}...]
【问题讨论】: