我找了musicmetadata用来读取音乐文件的信息,在使用中,发现在回调中获取了信息之后回传给变量的时候总是不成功。
函数如下:
function readMusicInfo(item) {
var tag = {};
var parser = mm(fs.createReadStream(item.dir), function (err, metadata) {
if (err) throw err;
console.info(metadata); //这里可以成功输出
tag = metadata; //这里赋值了
return tag;
});
}
var newTag = readMusicInfo(example);
console.info(newTag); //undefinded
用什么样的办法解决这个问题比较好?
不好意思手残了,刚才copy代码改错了一些地方……
两个问题:
1.tag的作用域是在readMusicInfo函数内,console当然是undefinded
2.异步的回调赋值,同步执行的时候,异步回调还没有执行完毕,输出也不可能对。
tag明显是局部变量,你怎么可能在函数外输出
tag是局部变量,只在readMusicInfo中可见。
可以在readMusicInfo函数的最后return tag
然后调用的时候 var tag = readMusicInfo(example);
问题很明显,你把Tag的定义从function内部,移到外层,就可以了
原来的代码
修改后的代码