【发布时间】:2016-12-10 01:03:00
【问题描述】:
我有一个完整的 mp3 文件夹,我想使用 id3-parser npm 模块对其进行解析,以便我可以返回一个 rss 提要。 id3-parser 文档说要使用这种结构:
id3.parse(filebuffer).then(function(tag){
console.log(tag.title);
});
id3-parser 模块使用 promise-a-plus 模块。我的代码的问题是标签在堆栈的最后被读取。这是我的测试代码:
var id3 = require('id3-parser');
var fs = require('fs');
fs.readdir("podcasts", function (err, files) {
files.forEach( function (file) {
var stats = fs.statSync("podcasts/" + file);
if (stats.isFile()) {
var fbuff = fs.readFileSync("podcasts/" + file);
id3.parse(fbuff).then( function (tag) {
console.log("***"+tag.title);
});
console.log("Parsed id3 tag " + file);
}
console.log("Done file");
});
console.log("Done readdir");
});
输出是:
Parsed id3 tag test.mp3
Done file
Done readdir
***Title tag
我终其一生都无法弄清楚如何正确地等待标签被解析。解析应该在我将其放入 rss 提要之前进行(使用 rss 模块创建该 xml 提要没有问题——代码未显示)。我一直在阅读有关承诺的内容,但我遗漏了一些东西。我确信我只需要完全重构我的代码,但不确定如何读取每个文件(当前使用 readdir 和 forEach)并将每个文件添加到提要中。
【问题讨论】:
标签: node.js asynchronous promise id3