【发布时间】:2021-10-22 21:13:46
【问题描述】:
我正在使用jsmediatags 来解析 mp3 文件中的元数据。此函数从文件中获取标题。遗憾的是,它在 onSuccess 回调完成之前返回。这是一个问题,因为在此函数之后,数据被序列化并在 song.title 设置之前发送出去。
我怎样才能等到jsmediatags.read 真正完成才能返回。 (它不是异步函数)。
const get_song = (song_path, album) => {
const song = {
title: null,
};
jsmediatags.read(song_path, {
onSuccess: function (tag) {
song.title = tag?.tags?.title;
console.info("set song fields", song.title);
},
onError: function (error) {}
});
console.info("return from get_song", song.title);
return song;
}
这个输出
"return from get_song null",
"set song fields TITLE"
然后我在实际设置之前使用song.title。
如何重新设计我的代码,以便在此回调完成后进行歌曲的序列化。
【问题讨论】:
-
坦率地说,我看不出有什么问题——你期望会发生什么,当然
read会立即返回——它返回并不是表示某些内容已被阅读,而是调用onSuccess(或错误时onError)表示这一点。你必须相应地设计你的代码。你现在明白控制台输出两行代码的原因了吗? -
@amn 是否可以编写一个等待
read完成的函数?还是有一些我应该说服的替代设计。在我连载歌曲之前,我真的需要知道它已经完成。 -
是的,有可能,请参阅提供的答案。
标签: javascript node.js ecmascript-6 electron